ไม่ได้\n อะไรภาษา sql ต้องเป็น bounding กล่องที่ระหว่างประเทศวันที่สาย

0

คำถาม

ฉันกำลังพยายามขอบเขตของฉันกับการค้นหาให้เลือกตำแหน่งของที่นี่ภายใน bounding กล่องของ latitudes/longitudes. โดยปกติแล้วมันทำงานดีได้รับกา bounding กล่องไม่ได้ข้ามผ่านระหว่างประเทศวันที่สาย

SELECT *
FROM locations
WHERE latitude BETWEEN ? AND ?
AND longitude BETWEEN ? AND ?

แต่ถ้าฉัน bounding กล่องถูกต้องข้ามระหว่างประเทศวันที่สายเลือดบอก longitudinal ขอบเขตของ 179.00 ต้อง -179.00 งั้นการสืบค้นกลับไม่มีผลลัพธ์เดียวกันนั่นแหละ ฉันแค่ไม่สามารถพลิกกลับคำสั่งและเปลี่ยนเป็นระหว่าง -179.00 แล้ว 179.00 เพราะมันจะแทนที่จะกลับมาอย่างข้างนอกของฉัน bounding ล่อง

อะไรคือ sanest ทางที่ดีที่สุดที่วางแผนที่เหมาะสมภาษา sql ต้องการ(ทั้งเป็นภาษา sql หรือ psuedocode นั่นคงช่วย derive ที่ดีที่สุดภาษา sql).

1

คำตอบที่ดีที่สุด

1

สิ่งหนึ่งที่คุณน่าจะใช้ CASE WHEN แสดงใน WHERE เงื่อนไขว่าต้องแยกความแตกต่างระหว่างคุณลง longitudinal ผูกมัดใหญ่กว่าด้านหนึ่งและแก้ไขพฤติกรรมได้ตามคาด:

SELECT * 
  FROM locations 
 WHERE lon BETWEEN CASE WHEN @param1 > @param2 THEN -180.0 
                        ELSE @param1 
                   END AND @param2 
    OR lon BETWEEN CASE WHEN @param1 > @param2 THEN @param1 
                        ELSE 181.0 
                   END AND 180.0

สำหรับตัวอย่างของคุณ(longitudinal ขอบเขตของ 179.00 ต้อง -179.00)เรื่องนี้มันจะต้องเดียวกับผลกระทบที่มือ

SELECT * 
  FROM locations 
 WHERE lon BETWEEN -180.0 AND -179.0
    OR lon BETWEEN 179.0 AND 180.0

ขณะเดียวกันกับการค้นหาสำหรับกกลับเป็นสีตรงข้ามตัวอย่าง(longitudinal ขอบเขตของ -179.00 ต้อง 179.00)จะประเมินผลต้อง

SELECT * 
  FROM locations 
 WHERE lon BETWEEN -179.0 AND 179.0
    OR lon BETWEEN 181.0 AND 180.0 -- (always false)

เห็นมันในระหว่างปฏิบัติการเมื่ออยู่ใน นี้ db<>ลื่นไหล(ภาษา sql เซิร์ฟเวอร์ตัวอย่าง).

2021-11-19 15:43:38

ฉันชอบที่นี่มันไป-ฉันคิดว่ามันเป็นคนดีอพิมพ์เขียวบอกเราต้องแปลเข้ารหัสที่สามารถสร้างภาษา sql โดยไม่ต้องเสมอซึ่งมันไม่จริงหรือเงื่อนไขว่า.
Dwight

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่