2013-01-22 11 views
9

MySQL के बीच दो समाप्ति बिंदुओं के साथ ही अंतिम बिंदु के बीच सभी परिणाम शामिल हैं।MySQL के बीच अंतिम बिंदुओं के बिना

तो expr से अधिक या उसके बराबर है और expr (न्यूनतम < = expr और expr < अन्यथा यह रिटर्न 0. यह बराबर अभिव्यक्ति है बराबर अधिकतम से कम या है, रिटर्न 1 के बीच, = अधिकतम) यदि सभी तर्क एक ही प्रकार के हैं। REFERENCE- http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

वहाँ REALLYBETWEEN की तरह एक समारोह जो अंतिम बिंदुओं को शामिल नहीं करता, या मैं min < expr AND expr < max का उपयोग कर अटक रहा है?

+2

आप अटक रहे हैं ... और वह इस तरह के एक बुरी बात नहीं है। यह कम से कम स्पष्ट है। –

+2

'मिनट + 1 और MAX के बीच - 1', आप अभिन्न प्रकार के साथ काम कर रहे हैं। – mellamokb

+0

@MichaelBerkowski। धन्यवाद। खोज रहे थे और कुछ भी नहीं मिला लेकिन निश्चित नहीं था। अच्छी खबर आज से पहले थी, मैंने सोचा था कि बीच में अंतराल शामिल नहीं थे। कम से कम अब मुझे पता है। – user1032531

उत्तर

11

मुझे लगता है कि आप इसे अपने आप को लिख सकते हैं:

where val > start and val < end 
बीच

है:

where val >= start and val <= end 

अनुक्रमित के रूप में, पहले दो between को सही ढंग से और हूबहू एक सूचकांक का उपयोग करना चाहिए, कि यह सोचते हैं प्रारंभ और अंत स्थिरांक हैं। मुझे यकीन नहीं है कि आखिरी संस्करण होगा या नहीं।

तो वैल एक जटिल अभिव्यक्ति है, तो निम्नलिखित पर विचार:

select * 
from (your query here) t 
where t.val > start and t.val < end 

यह केवल एक बार val मूल्यांकन करना चाहिए। मुझे लगता है कि अन्य रूपों का मूल्यांकन दो बार होगा।

या, आप कर सकता है:

where val between start and end and val not in (start, end) 
+0

आपका आखिरी सुझाव एक रचनात्मक तरीका है कि बिना किसी अंतराल के BETWEEEN का उपयोग कैसे करें! ऐसा मत सोचो कि किसी को इसका इस्तेमाल करना चाहिए, लेकिन यह निश्चित रूप से सवाल का जवाब दिया। मैं पहले दो समाधानों का उपयोग जारी रखूंगा। – user1032531

1

ध्यान दें कि BETWEEN एक अभिव्यक्ति है, न कि एक समारोह है। यह सिर्फ एक कोडिंग सुविधा है और इसका मतलब है कि वास्तव में क्या कहता है। कोई प्रदर्शन लाभ नहीं है।

अंतिमबिंदुओं निकालने के लिए आपको यह अपने आप कोड होना चाहिए।

+0

मुझे आश्चर्य है कि यह वास्तव में सच है। कुछ डेटाबेस हो सकते हैं जहां बाईं तरफ ('वैल') का मूल्यांकन केवल 'बीच' के लिए किया जाता है लेकिन दो तुलनाओं के लिए दो बार मूल्यांकन किया जाएगा। –

+0

@ गॉर्डन लिनॉफ मैं यह नहीं कह सकता कि यह सार्वभौमिक है, लेकिन मेरे द्वारा उपयोग किए जाने वाले डेटाबेस पर, एक एक्सप्लिन चलाने से पता चलता है कि 'x और y' के बीच 'a> = x और <= y' के रूप में निष्पादित किया गया है। – BellevueBob

संबंधित मुद्दे