Scoping SQL करने के लिए एक bounding बॉक्स पर अंतर्राष्ट्रीय तिथि रेखा

0

सवाल

मैं कोशिश कर रहा हूँ करने के लिए गुंजाइश मेरी क्वेरी का चयन करने के लिए कर रहे हैं कि स्थानों के भीतर एक bounding बॉक्स के अक्षांश/देशांतर है. आम तौर पर यह ठीक काम करता है को देखते हुए bounding बॉक्स को पार नहीं करता है अंतरराष्ट्रीय तिथि रेखा है ।

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

- लेकिन अगर मेरे bounding बॉक्स था पार करने के लिए अंतरराष्ट्रीय तिथि रेखा कहते हैं कि अनुदैर्ध्य की सीमा 179.00 करने के लिए -179.00 तो क्वेरी कोई परिणाम नहीं देता है. मैं नहीं कर सकता बस फ्लिप आदेश और इसे बदलने के लिए के बीच -179.00 और 179.00 होता है क्योंकि इसके बजाय वापसी की मेरी bounding बॉक्स.

क्या है sanest तरीका सबसे अच्छा करने के लिए निर्धारित उचित SQL आवश्यक (के रूप में या तो SQL या psuedocode में मदद मिलेगी कि प्राप्त सबसे अच्छा SQL).

1

सबसे अच्छा जवाब

1

एक बात है कि आप कर सकते हैं है का उपयोग करें CASE WHEN अभिव्यक्ति में WHERE खंड भेद करने के लिए है कि क्या अपने निचले अनुदैर्ध्य सीमा से बड़ा है, एक ऊपरी और व्यवहार को संशोधित तदनुसार:

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

अपने उदाहरण के लिए (अनुदैर्ध्य की सीमा 179.00 करने के लिए -179.00), यह होगा एक ही प्रभाव के रूप में

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

जबकि एक ही क्वेरी के लिए उल्टे उदाहरण (अनुदैर्ध्य की सीमा -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<>बेला (एसक्यूएल सर्वर उदाहरण के लिए).

2021-11-19 15:43:38

मैं की तरह यह कहाँ जा रहा है - मुझे लगता है कि यह एक अच्छा खाका में अनुवाद करने के लिए कुछ कोड उत्पन्न कर सकता है कि SQL के बिना हमेशा झूठा या खंड ।
Dwight

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में