MS SQL-datums vergelijken?

Ik heb 2 datums (datetimes):

date1 = 2010-12-31 15:13:48.593
date2 = 2010-12-31 00:00:00.000

Het is dezelfde dag, alleen andere tijden. Het vergelijken van date1 en date2 met <= werkt niet vanwege de datum1 tijd. Dus date1 <= date2 is fout, maar zou waar moeten zijn. Kan ik ze vergelijken door alleen naar het jaar, de maand en de dag te kijken, zodat ze hetzelfde zijn? Zijn SQL Server 2008.

Bedankt 🙂


Antwoord 1, autoriteit 100%

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

Moet doen wat je nodig hebt.

Testcase

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 

Retourneren

COMPARISON_WITH_CAST   |  COMPARISON_WITHOUT_CAST
Y                         N

Antwoord 2, autoriteit 75%

Gebruik de functie DATEDIFFmet een datumdeel van day.

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

Merk op dat als u die date1<= date2wilt testen, u die DATEDIFF(day, date1, date2) >= 0, of u kunt ook DATEDIFF(day, date2, date1) <= 0testen.


Antwoord 3, autoriteit 3%

De eenvoudige éénregelige oplossing is

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

Je kunt hiermee verschillende opties proberen, behalve “dd”


Antwoord 4

Probeer dit:

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

Antwoord 5

Ik gebruik DateDiff(day,date1,date2) altijd om twee datums te vergelijken.

Afrekenen volgend voorbeeld. Kopieer dat gewoon en voer het uit op de SQL-server van mevrouw.
Probeer ook met de wijzigingsdatum vóór 31 dec tot 30 dec en controleer het resultaat

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

Other episodes