two restar meses fechas entre diferencia dates comparar como sql-server tsql sql-server-2008 date

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