sql >> Base de Datos >  >> RDS >> Sqlserver

Compare fechas en T-SQL, ignorando la parte del tiempo

La forma más razonable de hacer esto es quitar la porción de tiempo de los valores de fecha y hora y comparar los resultados, y la mejor manera de quitar la porción de tiempo de una fecha y hora es así:

cast(current_timestamp as date)    

Solía ​​usar y defender un proceso que se parecía a una de las siguientes dos líneas:

cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))

Pero ahora que Sql Server tiene la Date tipo, que no tiene un componente de tiempo, hay pocas razones para usar cualquiera de esas técnicas.

Una cosa más a tener en cuenta es que esto aún atascará una consulta si necesita hacerlo para dos valores de fecha y hora para cada fila en una cláusula where o condición de combinación. Si es posible, desea factorizar esto de alguna manera para que se calcule previamente tanto como sea posible, por ejemplo, utilizando una vista o una columna calculada.

Finalmente, tenga en cuenta que la función DATEDIFF compara el número de límites cruzados. Esto significa la fecha en días entre '2009-09-14 11:59:59' y '2009-09-15 00:00:01' es 1, aunque solo han transcurrido 2 segundos, pero el DATEDIFF en días entre '2009-09-15 00:00:01' y '2009-09-15 11:59:59' sigue siendo cero, aunque hayan transcurrido 86.398 segundos. Realmente no le importa en absoluto la porción de tiempo allí, solo los límites. Dependiendo de lo que intente hacer su consulta, es posible que pueda usar eso para su beneficio.