sql-server - restar - sql compare two datetime
MS SQL comparar fechas? (5)
Tengo 2 fechas (datetimes):
date1 = 2010-12-31 15: 13: 48.593
date2 = 2010-12-31 00: 00: 00.000
Es el mismo día, solo tiempos diferentes. La comparación de fecha1 y fecha2 con <= no funciona debido a la fecha1 hora. Entonces date1 <= date2 es incorrecto, pero debería ser cierto. ¿Puedo compararlos simplemente mirando el año, el mes y el día para que sean iguales? Su SQL Server 2008.
Gracias :)
La solución simple de una línea es
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
Puedes probar varias opciones con esto que no sea "dd"
Prueba esto:
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
Siempre uso DateDiff (day, date1, date2) para comparar dos fechas.
Comprobación del siguiente ejemplo. Solo cópielo y ejecútelo en el servidor Ms sql. Además, intente con la fecha de cambio entre el 31 de diciembre y el 30 de diciembre y compruebe el 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
Use la función DATEDIFF
con una fecha del day
.
SELECT ...
FROM ...
WHERE DATEDIFF(day, date1, date2) >= 0
Tenga en cuenta que si desea probar esa date1
<= date2
entonces debe probar que DATEDIFF(day, date1, date2) >= 0
, o alternativamente, puede probar DATEDIFF(day, date2, date1) <= 0
.
SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...
Debería hacer lo que necesita.
Caso de prueba
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
Devoluciones
COMPARISON_WITH_CAST | COMPARISON_WITHOUT_CAST
Y N