Eu tenho 2 datas (datetimes):
date1 = 2010-12-31 15: 13: 48.593 date2
= 2010-12-31 00: 00: 00.000
É o mesmo dia, mas em horários diferentes. Comparar data1 e data2 usando <= não funciona por causa da hora data1. Portanto, data1 <= data2 está errada, mas deveria ser verdadeira. Posso compará-los apenas olhando para o ano, mês e dia para que sejam iguais? É o SQL Server 2008.
Obrigado :)
sql-server
tsql
sql-server-2008
date
gradativamente
fonte
fonte
Respostas:
SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...
Deve fazer o que você precisa.
Caso de teste
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
Devoluções
fonte
DATE
tipo não estava disponível antes do SQL Server 2008.Use a
DATEDIFF
função com uma parte da data deday
.SELECT ... FROM ... WHERE DATEDIFF(day, date1, date2) >= 0
Observe que se você quiser testar que
date1
<=date2
, você precisa testar issoDATEDIFF(day, date1, date2) >= 0
ou, alternativamente, pode testarDATEDIFF(day, date2, date1) <= 0
.fonte
date1
edate2
; isto é, o número de meia-noite que você passaria para irdate1
paradate2
A solução simples de uma linha é
Você pode tentar várias opções com este diferente de "dd"
fonte
Experimente 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
fonte
Sempre uso DateDiff (dia, data1, data2) para comparar duas datas.
Verifique o seguinte exemplo. Apenas copie e execute no servidor Ms sql. Além disso, tente alterar a data de 31 a 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
fonte