दो तिथियों के बीच दिनांक सीमा से डेटा का चयन करें


100

मेरे पास एक तालिका नामांकित है Product_Salesऔर यह इस तरह से डेटा रखती है

Product_ID | Sold_by | Qty | From_date  | To_date
-----------+---------+-----+------------+-----------
3          | 12      | 7   | 2013-01-05 | 2013-01-07
6          | 22      | 14  | 2013-01-06 | 2013-01-10
8          | 11      | 9   | 2013-02-05 | 2013-02-11

अब यदि मैं एक तिथि सीमा से दो तिथियों के बीच बिक्री डेटा का चयन करना चाहता हूं तो क्वेरी क्या है?

उदाहरण के लिए, मैं से बिक्री डेटा का चयन करना चाहते 2013-01-03करने के लिए 2013-01-09


To_date> 2013-01-03 और From_date <2013-01-09। ?
jpulikkottil

जवाबों:


144

अंतराल चौराहा विवरण

जैसा कि आप देख सकते हैं, चीजों को करने के दो तरीके हैं:

  • सभी स्वीकार्य विकल्पों को सूचीबद्ध करें
  • सभी गलत विकल्पों को बाहर करें

जाहिर है, दूसरा तरीका बहुत अधिक सरल है (चार के खिलाफ केवल दो मामले)।

आपकी SQL जैसी दिखेगी:

SELECT * FROM Product_sales 
WHERE NOT (From_date > @RangeTill OR To_date < @RangeFrom)

13
मैं सिर्फ इतना कहना चाहता हूं कि मैं प्यार करता हूं कि आपने उत्तर को समझाने के लिए इसे एक सफेद बोर्ड पर फेंक दिया। आपको मेरा सम्मान और मेरी प्रशंसा है।
बेन बर्नम

3
मुझे पता है कि यह मुद्दा बहुत पुराना है, लेकिन अगर आप नहीं चाहते हैं या इस WHERE NOTशर्त का उपयोग नहीं कर सकते हैं, तो ऑपरेटरों को घुमाकर और समान जोड़कर भी काम कर रहे हैं: SELECT * FROM Product_sales WHERE From_date <= @RangeTill OR To_date >= @RangeFrom
लॉरेंज ग्लुक

84
SELECT * from Product_sales where
(From_date BETWEEN '2013-01-03'AND '2013-01-09') OR 
(To_date BETWEEN '2013-01-03' AND '2013-01-09') OR 
(From_date <= '2013-01-03' AND To_date >= '2013-01-09')

आपको सभी संभावनाओं को कवर करना होगा। From_Date या To_Date आपकी दिनांक सीमा के बीच हो सकता है या रिकॉर्ड दिनांक पूरी श्रेणी को कवर कर सकता है।

में से एक हैं From_dateया To_dateतिथियों के बीच है, या From_dateआरंभ तिथि से कम है और To_dateसमाप्ति तिथि से अधिक होती है; फिर यह पंक्ति वापस आनी चाहिए।


पृष्ठ का उत्तर (Y)
ग्रीनरोबो

यदि इनपुट करने की तिथि शून्य या रिक्त है, तो सभी डेटा कैसे लौटाएं? और यह भी कि, यदि कोई तिथि शून्य या रिक्त है, तो उस मानदंड के आधार पर परिणाम प्राप्त करना चाहिए
कोडन दुनिया

40

सीमा के बीच दिनांक प्राप्त करने के लिए क्वेरी का अनुसरण करें:

SELECT  *
FROM    Product_sales 
WHERE   From_date >= '2013-01-03' AND
        To_date   <= '2013-01-09'

8
यह सभी संभावनाओं को कवर नहीं करता है!
फॉलनएंगल

@FallenAngel, क्या आप मुझे समझा सकते हैं जो कवर नहीं हैं?
बबलू

4
मेरी चेक जवाब कृपया, आप बिक्री से पहले शुरू कर दिया शामिल नहीं थीं start_dateलेकिन बीच समाप्त हो गया start_dateऔर end_date। दूसरी ओर, यह प्रश्न स्पष्ट नहीं है कि मुझे लगता है, हमारे पास कोई सुराग नहीं है कि क्या हमें बिक्री लेनी चाहिए जो दी गई तारीखों या तिथियों के बीच कड़ाई से होती है जिसमें आंशिक रूप से तिथि सीमा शामिल है, लेकिन एक तरफ या दूसरे या दोनों पर विस्तारित हो सकती है? इसलिए मूल समस्या यह है कि प्रश्न स्पष्ट नहीं है, मुझे लगता है।
फॉलनएंगल

मुझे पता है कि यह पोस्ट पुरानी है, लेकिन पढ़ने वालों के लिए: यह तारीखों के बीच नहीं है बल्कि तारीखों का समावेश है। से और को।
केन

23
SELECT * FROM Product_sales 
WHERE From_date between '2013-01-03'
AND '2013-01-09'

आपका चयन उदाहरण के लिए गलत होगा From_date: 2012-12-30 से To_Date: 2013-01-05। ये तिथियां वांछित सीमा के अंदर हैं, लेकिन आपकी SQL में वापस नहीं आएगा क्योंकि वे सीमा से पहले शुरू होते हैं , लेकिन वे सीमा के अंदर समाप्त होते हैं
NetVicious

5

इसमें उन सभी स्थितियों को शामिल किया गया है जिनकी आप तलाश कर रहे हैं।

SELECT * from Product_sales where (From_date <= '2013-01-09' AND To_date >= '2013-01-01')

4
SELECT *
FROM Product_sales
WHERE (
From_date >= '2013-08-19'
AND To_date <= '2013-08-23'
)
OR (
To_date >= '2013-08-19'
AND From_date <= '2013-08-23'
)

1
समावेशी चौराहे के लिए आप एक और OR क्लॉज़ जोड़ना चाहेंगे जब from_date शुरू होने से पहले हो और to_date समाप्ति के बाद हो: या (To_date <= '2013-08-19' और From_date = = '2013-08- 23 ')
झोरबैक

3

प्रयास करें:

DECLARE @FrmDt DATETIME, @ToDt DATETIME
SELECT @FrmDt='2013-01-03', @ToDt='2013-01-09'

SELECT * 
FROM Product_sales 
WHERE (@FrmDt BETWEEN From_date AND To_date) OR 
    (@ToDt BETWEEN From_date AND To_date)

3

बस मेरे 2 सेंट, मुझे "dd-MMM-yyyy" प्रारूप का उपयोग करना सबसे सुरक्षित है क्योंकि db सर्वर को पता चल जाएगा कि आप सर्वर पर क्षेत्रीय सेटिंग्स की परवाह किए बिना क्या चाहते हैं। अन्यथा आप संभावित रूप से एक सर्वर पर मुद्दों में भाग सकते हैं, जिसमें yyyy-dd-mm (जो भी हो) के रूप में इसकी तारीख क्षेत्रीय सेटिंग्स है

इस प्रकार:

SELECT * FROM Product_sales 
WHERE From_date >= '03-Jan-2013'
AND To_date <= '09-Jan-2013'

यह हमेशा मेरे लिए अच्छी तरह से काम किया ;-)


3

यह SQL_Server_2008 R2 पर काम कर रहा है

Select * 
from Product_sales
where From_date 
between '2013-01-03' and '2013-01-09'

3
select * 
from table 
where
( (table.EndDate > '2013-01-05') and (table.StartDate < '2013-01-07' )  )


1
SELECT NULL  
    FROM   HRMTable hm(NOLOCK)  
    WHERE  hm.EmployeeID = 123
        AND (  
                (  
                    CAST(@Fromdate AS date) BETWEEN CAST(hm.FromDate AS date)  
                        AND CAST(hm.ToDate AS date)  
                )  
                OR (  
                    CAST(@Todate AS date) BETWEEN CAST(hm.FromDate AS date)  
                        AND CAST(hm.ToDate AS date)  
                   )  
                ) 
         )

1

इस क्वेरी को जांचें, मैंने यह क्वेरी यह जांचने के लिए बनाई है कि क्या किसी भी रिजर्वेशन डेट के साथ लैप ओवर की तारीख है

SELECT * FROM tbl_ReservedRooms
WHERE NOT ('@checkindate' NOT BETWEEN fromdate AND todate
  AND '@checkoutdate'  NOT BETWEEN fromdate AND todate)

यह उन विवरणों को फिर से लिख देगा, जो ओवरलैपिंग हैं, ओवरलैपिंग विवरण प्राप्त नहीं करने के लिए फिर क्वेरी से 'नहीं' हटा दें।


1

आप निम्नलिखित टुकड़ों का उपयोग करके भी देख सकते हैं:

select  * from  Product_sales 
where  From_date  >= '2013-01-03' and game_date  <= '2013-01-09'

1

यह आसान है, दो तिथियों के बीच दिनांक सीमा से चुनिंदा डेटा खोजने के लिए इस क्वेरी का उपयोग करें

select * from tabblename WHERE (datecolumn BETWEEN '2018-04-01' AND '2018-04-5')

0

आपको sql में तारीखों की तुलना उसी तरह करनी चाहिए जैसे आप संख्या मूल्यों की तुलना करते हैं,

SELECT * FROM Product_sales
WHERE From_date >= '2013-01-01' AND To_date <= '2013-01-20'

0

यहां उन सभी उत्पादों की बिक्री खोजने के लिए एक प्रश्न है जो अगस्त महीने के दौरान चल रहे थे

  • Product_sales खोजें अगस्त के महीने के दौरान सक्रिय थे
  • अगस्त के अंत से पहले शुरू हुई किसी भी चीज़ को शामिल करें
  • 1 अगस्त से पहले समाप्त होने वाली किसी भी चीज़ को छोड़ दें

क्वेरी को मान्य करने के लिए एक केस स्टेटमेंट भी जोड़ता है

SELECT start_date, 
       end_date, 
       CASE 
         WHEN start_date <= '2015-08-31' THEN 'true' 
         ELSE 'false' 
       END AS started_before_end_of_month, 
       CASE 
         WHEN NOT end_date <= '2015-08-01' THEN 'true' 
         ELSE 'false' 
       END AS did_not_end_before_begining_of_month 
FROM   product_sales 
WHERE  start_date <= '2015-08-31' 
       AND end_date >= '2015-08-01' 
ORDER  BY start_date; 

0
DECLARE @monthfrom int=null,
@yearfrom int=null,
@monthto int=null,
@yearto int=null,
@firstdate DATE=null,
@lastdate DATE=null

SELECT @firstdate=DATEADD(month,@monthfrom-1,DATEADD(year,@yearfrom-1900,0)) /*Setting First Date using From Month & Year*/
SELECT @lastdate= DATEADD(day,-1,DATEADD(month,@monthto,DATEADD(year,@yearto-1900,0)))/*Setting Last Date using From Month & Year*/

SELECT *  FROM tbl_Record
WHERE  (DATEADD(yy, Year - 1900, DATEADD(m, Month - 1, 1 - 1)) BETWEEN CONVERT(DATETIME, @firstdate, 102) AND 
CONVERT(DATETIME, @lastdate, 102))

-1

यह आसान है, इस क्वेरी का उपयोग यह खोजने के लिए करें कि आप क्या चाहते हैं।

select * from Product_Sales where From_date<='2018-04-11' and To_date>='2018-04-11'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.