MS SQL comparar datas?

Tenho 2 datas (datas):

data1 = 2010-12-31 15:13:48.593
data2 = 2010-12-31 00:00:00.000

É o mesmo dia, apenas tempos diferentes. Comparar dados 1 e date2 usando < = não funciona por causa da hora do date1. Então date1 < = date2 está errado, mas deve ser verdade. Posso compará-los olhando apenas para o ano, mês e dia para que eles são os mesmos? O seu servidor SQL 2008.

Obrigado.
Author: Martin Smith, 2011-01-25

5 answers

SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...
Deve fazer o que precisa.

Estojo De Ensaio

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 
O

Devolve

COMPARISON_WITH_CAST   |  COMPARISON_WITHOUT_CAST
Y                         N
 77
Author: Martin Smith, 2015-07-09 14:20:42

DATEDIFF função com um datepart de day.

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

Note que se quiser testar isso date1 date2 então você precisa testar isso DATEDIFF(day, date1, date2) >= 0, ou alternativamente você pode testar DATEDIFF(day, date2, date1) <= 0.

 61
Author: LukeH, 2011-01-25 13:49:13

A solução simples de uma linha é

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

Pode tentar várias opções com isto, excepto " dd "

 3
Author: Sarathi B, 2014-10-31 21:32:01

Sou sempre usado DateDiff (day,date1, date2) para comparar duas datas.

Check-out a seguir ao exemplo. Copia isso e corre no servidor de Ms sql. Além disso, tente alterar a data até 31 de dezembro para 30 de dezembro e verifique o resultado

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
 0
Author: Jignesh Darji, 2017-04-05 07:06:34

Tenta Isto:

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
 -1
Author: Kumar Akhil, 2016-02-19 18:39:16