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 datesDevoluciones
fuente
DATEtipo no estaba disponible antes de SQL Server 2008.Utilice la
DATEDIFFfunción con una parte de fechaday.SELECT ... FROM ... WHERE DATEDIFF(day, date1, date2) >= 0Tenga en cuenta que si desea probar que
date1<=date2, debe probarloDATEDIFF(day, date1, date2) >= 0o, alternativamente, puede probarDATEDIFF(day, date2, date1) <= 0.fuente
date1ydate2; es decir, el número de medias noches que había pasar a través para llegar desdedate1adate2La 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 Endfuente
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 Endfuente