जवाबों:
BETWEEN ऑपरेटर समावेशी है।
ऑनलाइन पुस्तकों से:
BETWEEN TRUE लौटाता है यदि test_expression का मूल्य start_expression के मान से अधिक या बराबर है और end_expression के मान से कम या उसके बराबर है।
डेटटाइम कैविट
नायब: डेटटाइम्स के साथ आपको सावधान रहना होगा; यदि केवल एक तारीख दी जाती है तो उस दिन आधी रात को मान लिया जाता है; अपनी समाप्ति तिथि के भीतर गुम समय से बचने के लिए, या अगले दिन के डेटा को कई श्रेणियों में आधी रात को दोहराने से रोकने के लिए, आपकी अंतिम तिथि आपकी तिथि के बाद दिन की आधी रात से पहले 3 मिलीसेकंड होनी चाहिए। 3 मिलीसेकंड क्योंकि इससे कम और मूल्य अगले दिन आधी रात तक होगा।
जून 2016 के भीतर सभी मान प्राप्त करने के लिए आपको दौड़ने की आवश्यकता होगी:
where myDateTime between '20160601' and DATEADD(millisecond, -3, '20160701')
अर्थात
where myDateTime between '20160601 00:00:00.000' and '20160630 23:59:59.997'
एक तारीख से 3 एमएस को घटाकर आप 3 एमएस विंडो से लापता पंक्तियों के लिए असुरक्षित छोड़ देंगे। सही समाधान भी सबसे सरल है:
where myDateTime >= '20160601' AND myDateTime < '20160701'
CONVERT
एक datetime एक करने के लिए तिथि , कि के रूप में बेकार अनुक्रमित प्रस्तुत करना होगा। मानक का उपयोग करें WHERE OrderDate >= '20160601' AND OrderDate < '20160701'
। इसके अलावा, उपयोग करना सुनिश्चित करें yyyymmdd
, जैसा yyyy-mm-dd
कि स्थानीय निर्भर है, और आपके सर्वर की mdy, dmy, ymd, ydm, myd, and dym
सेटिंग के आधार पर गलत व्याख्या की जाएगी ।
हां, लेकिन तारीखों के लिए उपयोग करते समय सावधान रहें।
BETWEEN '20090101' AND '20090131'
वास्तव में 12am के रूप में व्याख्या की जाती है, या
BETWEEN '20090101 00:00:00' AND '20090131 00:00:00'
इसलिए 31 जनवरी के दिन के दौरान कुछ भी याद होगा। इस स्थिति में, आपको उपयोग करना होगा:
myDate >= '20090101 00:00:00' AND myDate < '20090201 00:00:00' --CORRECT!
या
BETWEEN '20090101 00:00:00' AND '20090131 23:59:59' --WRONG! (see update!)
अद्यतन : यह पूरी तरह से संभव है कि दिन के अंतिम सेकंड के भीतर रिकॉर्ड बनाया जाए, साथ ही साथ डेटटाइम भी देर से 20090101 23:59:59.997
!!
इस कारण से, BETWEEN (firstday) AND (lastday 23:59:59)
दृष्टिकोण की सिफारिश नहीं की जाती है।
myDate >= (firstday) AND myDate < (Lastday+1)
इसके बजाय दृष्टिकोण का उपयोग करें ।
इस मुद्दे पर यहाँ अच्छा लेख ।
WHERE col BETWEEN 'a' AND 'z'
उदाहरण के लिए अधिकांश z पंक्तियों को बाहर कर देंगे।
BETWEEN 5 AND 10
इसमें शामिल नहीं है 10.2
...
CAST
काम के datetime
रूप में आईएनजी :। DATE
CAST(DATE_TIME_COL AS DATE) BETWEEN '01/01/2009' AND '01/31/2009'
It is entirely possible to have records created within that last second of the day, with a datetime as late as 01/01/2009 23:59:59.997
<- सके तुम सिर्फ तब का उपयोग AND '01/31/2009 23:59:59.99999999'
या हालांकि कई 9 के लिए आवश्यक हैं
SQL सर्वर 2008 से वास्तविक दुनिया उदाहरण।
स्रोत डेटा:
ID Start
1 2010-04-30 00:00:01.000
2 2010-04-02 00:00:00.000
3 2010-05-01 00:00:00.000
4 2010-07-31 00:00:00.000
प्रश्न:
SELECT
*
FROM
tbl
WHERE
Start BETWEEN '2010-04-01 00:00:00' AND '2010-05-01 00:00:00'
परिणाम:
ID Start
1 2010-04-30 00:00:01.000
2 2010-04-02 00:00:00.000
ID = 3
बाहर क्यों रखा गया है? इसका Start
मान BETWEEN
ऊपरी-बाउंड मान के बराबर है , और BETWEEN
एक समावेशी श्रेणी है, न कि एक विशेष ऊपरी-बाउंडेड श्रेणी।
यदि आप इसे मारते हैं, और वास्तव में कोशिश नहीं करना चाहते हैं और कोड में एक दिन जोड़ना चाहते हैं, तो DB को इसे करने दें।
myDate >= '20090101 00:00:00' AND myDate < DATEADD(day,1,'20090101 00:00:00')
यदि आप समय भाग को शामिल करते हैं: सुनिश्चित करें कि यह मध्यरात्रि को संदर्भित करता है। अन्यथा आप समय को छोड़ सकते हैं:
myDate >= '20090101' AND myDate < DATEADD(day,1,'20090101')
और इसके बारे में चिंता मत करो।
बेटविन (लेनदेन-एसक्यूएल)
निर्दिष्ट करने के लिए एक ( n ) ( समावेशी ) श्रेणी निर्दिष्ट करता है ।
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
तर्क
test_expression
क्या start_expression और end_expression द्वारा परिभाषित सीमा में परीक्षण करने के लिए अभिव्यक्ति है। test_expression एक ही डेटा प्रकार होना चाहिए, जैसे दोनों start_expression और end_expression।
NOT
निर्दिष्ट करता है कि विधेय के परिणाम को नकारा जाना चाहिए।
begin_expression
कोई मान्य अभिव्यक्ति है। start_expression एक ही डेटा प्रकार होना चाहिए जैसे कि test_expression और end_expression दोनों।
end_expression
कोई मान्य अभिव्यक्ति है। end_expression एक ही डेटा प्रकार होना चाहिए जैसे कि test_expression और Begin_expression दोनों।
AND
एक प्लेसहोल्डर के रूप में कार्य करता है जो इंगित करता है कि test_expression start_expression और end_expression द्वारा इंगित सीमा के भीतर होना चाहिए।
टिप्पणियों
किसी विशेष श्रेणी को निर्दिष्ट करने के लिए, (>) से अधिक और ऑपरेटरों से कम (<) का उपयोग करें। यदि किसी इनपुट को BETWEEN या NOT BETWEEN predicate NULL है, तो परिणाम UNKNOWN है।
परिणाम मान
BETWEEN TRUE लौटाता है यदि test_expression का मूल्य start_expression के मान से अधिक या बराबर है और end_expression के मान से कम या उसके बराबर है।
यदि सही नहीं है तो TRUE वापस नहीं आता है यदि test_expression का मूल्य start_expression के मान से कम या end_expression के मान से अधिक है।
यदि स्तंभ डेटा प्रकार डेटाइम है, तो आप डेटटाइम से समय समाप्त करने और दिनांक सीमा के बीच तुलना करने के लिए ऐसा कर सकते हैं।
where cast(getdate() as date) between cast(loginTime as date) and cast(logoutTime as date)
इसमें सीमाएँ शामिल हैं।
declare @startDate date = cast('15-NOV-2016' as date)
declare @endDate date = cast('30-NOV-2016' as date)
create table #test (c1 date)
insert into #test values(cast('15-NOV-2016' as date))
insert into #test values(cast('20-NOV-2016' as date))
insert into #test values(cast('30-NOV-2016' as date))
select * from #test where c1 between @startDate and @endDate
drop table #test
RESULT c1
2016-11-15
2016-11-20
2016-11-30
declare @r1 int = 10
declare @r2 int = 15
create table #test1 (c1 int)
insert into #test1 values(10)
insert into #test1 values(15)
insert into #test1 values(11)
select * from #test1 where c1 between @r1 and @r2
drop table #test1
RESULT c1
10
11
15
मैंने हमेशा इसका उपयोग किया है:
कहाँ मेरा बेटा शुरू हो रहा है और अंत (1 +)