MS SQL दिनांक की तुलना करें?


86

मेरे पास 2 तारीखें (डेटाइम) हैं:

तारीख 1 = 2010-12-31 15: 13: 48.593
तारीख 2 = 2010-12-31 00: 00: 00.000

एक ही दिन, बस अलग-अलग समय। Date1 समय की वजह से <= does not का उपयोग करके तारीख 1 और तारीख 2 की तुलना करना। तो date1 <= date2 गलत है, लेकिन सच होना चाहिए। क्या मैं वर्ष, महीने और दिन को देखकर उनकी तुलना कर सकता हूं ताकि वे समान हों? इसका SQL Server 2008।

धन्यवाद :)


SQL सर्वर का क्या संस्करण? आप किस संदर्भ में यह तुलना कर रहे हैं (यदि आप उन स्तंभों से तुलना कर रहे हैं, जिन्हें आपको ध्यान में रखने योग्य चीज़ों की आवश्यकता है)?
मार्टिन स्मिथ

मैं इसे "चुनिंदा मामले" में कर रहा हूं। यदि दिनांक <= हैं, तो ऐसा करें, यदि नहीं, तो करें। इसका एसक्यूएल सर्वर 2008
13

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

तारीख 1 <= तारीख 2 = सच? 3PM 12AM से कम कैसे है?
4 छुट्टी कवर

जवाबों:


88
SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...

आपको जो चाहिए वो करना चाहिए।

परीक्षण का मामला

WITH dates(date1, date2, date3, date4)
     AS (SELECT CAST('20101231 15:13:48.593' AS DATETIME),
                CAST('20101231 00:00:00.000' AS DATETIME),
                CAST('20101231 15:13:48.593' AS DATETIME),
                CAST('20101231 00:00:00.000' AS DATETIME))
SELECT CASE
         WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) THEN 'Y'
         ELSE 'N'
       END AS COMPARISON_WITH_CAST,
       CASE
         WHEN date3 <= date4 THEN 'Y'
         ELSE 'N'
       END AS COMPARISON_WITHOUT_CAST
FROM   dates 

रिटर्न

COMPARISON_WITH_CAST   |  COMPARISON_WITHOUT_CAST
Y                         N

1
ध्यान दें कि DATEटाइप SQL Server 2008 से पहले उपलब्ध नहीं था।
ल्यूक

@ ल्यूक - हां। इसलिए ओपी क्या संस्करण है के रूप में मेरी क्वेरी।
मार्टिन स्मिथ

@ उन्न - हाँ यह करता है! देखें टेस्ट केस यह वही करता है जो आप कहते हैं कि आप चाहते हैं!
मार्टिन स्मिथ

68

DATEDIFFके किसी दिनांक के साथ फ़ंक्शन का उपयोग करें day

SELECT ...
FROM ...
WHERE DATEDIFF(day, date1, date2) >= 0

ध्यान दें कि यदि आप परीक्षण करना चाहते हैं कि date1<= date2तो आपको वह परीक्षण करने की आवश्यकता है DATEDIFF(day, date1, date2) >= 0, या वैकल्पिक रूप से आप परीक्षण कर सकते हैं DATEDIFF(day, date2, date1) <= 0


यह काम करता है, लेकिन आप pls समझा सकते हैं क्यों? Isant कि तुलना दिनों बस?
ढाल

1
@ क्रम: नहीं, यह दिन की सीमाओं की संख्या date1और के बीच की गणना करता है date2; यह है कि, midnights की संख्या आप से प्राप्त करने के लिए के माध्यम से दे देते हैं date1करने के लिएdate2
LukeH

5
+1 सबसे सुरुचिपूर्ण समाधान यहाँ। मैं ABS या <> 0 पर विचार करना चाहूंगा, अगर तारीख 1 से पहले तारीख 2 के लिए अनुमति देने की आवश्यकता है
gbn

3

सरल एक लाइन समाधान है

datediff(dd,'2010-12-31 15:13:48.593','2010-12-31 00:00:00.000')=0

datediff(dd,'2010-12-31 15:13:48.593','2010-12-31 00:00:00.000')<=1

datediff(dd,'2010-12-31 15:13:48.593','2010-12-31 00:00:00.000')>=1

आप "dd" के अलावा इसके साथ विभिन्न विकल्प आज़मा सकते हैं


0

इसे इस्तेमाल करे:

BEGIN

declare @Date1 datetime
declare @Date2 datetime

declare @chkYear int
declare @chkMonth int
declare @chkDay int
declare @chkHour int
declare @chkMinute int
declare @chkSecond int
declare @chkMiliSecond int

set @Date1='2010-12-31 15:13:48.593'
set @Date2='2010-12-31 00:00:00.000'

set @chkYear=datediff(yyyy,@Date1,@Date2)
set @chkMonth=datediff(mm,@Date1,@Date2)
set @chkDay=datediff(dd,@Date1,@Date2)
set @chkHour=datediff(hh,@Date1,@Date2)
set @chkMinute=datediff(mi,@Date1,@Date2)
set @chkSecond=datediff(ss,@Date1,@Date2)
set @chkMiliSecond=datediff(ms,@Date1,@Date2)

if @chkYear=0 AND @chkMonth=0 AND @chkDay=0 AND @chkHour=0 AND @chkMinute=0 AND @chkSecond=0 AND @chkMiliSecond=0
    Begin
        Print 'Both Date is Same'
    end
else
    Begin
        Print 'Both Date is not Same'
    end
End

0

दो दिनांक की तुलना करने के लिए मुझे हमेशा DateDiff (दिन, तारीख 1, तारीख 2) का उपयोग किया जाता है।

चेकआउट निम्नलिखित उदाहरण। बस इसे कॉपी करें और Ms sql सर्वर में चलाएं। इसके अलावा, 31 तारीख से 30 तारीख तक परिवर्तन की तारीख और परिणाम की जांच करें

BEGIN

declare @firstDate datetime
declare @secondDate datetime


declare @chkDay int

set @firstDate ='2010-12-31 15:13:48.593'
set @secondDate ='2010-12-31 00:00:00.000'

set @chkDay=Datediff(day,@firstDate ,@secondDate )

if @chkDay=0
    Begin
        Print 'Date is Same'
    end
else
    Begin
        Print 'Date is not Same'
    end
End
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.