Tengo 2 fechas (fecha y hora):
fecha1 = 2010-12-31 15: 13: 48.593
fecha2 = 2010-12-31 00: 00: 00.000
Es el mismo día, solo que en diferentes momentos. La comparación de date1 y date2 usando <= no funciona debido a la hora de date1. Entonces, date1 <= date2 es incorrecto, pero debería ser cierto. ¿Puedo compararlos con solo mirar el año, mes y día para que sean iguales? Es SQL Server 2008.
Gracias :)
sql-server
tsql
sql-server-2008
date
grady
fuente
fuente
Respuestas:
SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...
Debería hacer lo que necesite.
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
fuente
DATE
tipo no estaba disponible antes de SQL Server 2008.Utilice la
DATEDIFF
función con una parte de fechaday
.SELECT ... FROM ... WHERE DATEDIFF(day, date1, date2) >= 0
Tenga en cuenta que si desea probar que
date1
<=date2
, debe probarloDATEDIFF(day, date1, date2) >= 0
o, alternativamente, puede probarDATEDIFF(day, date2, date1) <= 0
.fuente
date1
ydate2
; es decir, el número de medias noches que había pasar a través para llegar desdedate1
adate2
La solución simple de una línea es
Puede probar varias opciones con esta que no sea "dd"
fuente
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
fuente
Siempre utilizo DateDiff (día, fecha1, fecha2) para comparar dos fechas.
Verifique el siguiente ejemplo. Simplemente copie eso y ejecútelo en Ms sql server. Además, intente cambiar la fecha antes del 31 de diciembre al 30 de diciembre y verifique 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
fuente