viernes, 24 de diciembre de 2010

Comparaciones de fechas en SQL.

Una de esas cosas que en código son tan simples, en SQL parecen espantosamente complicadas hasta que encuentres a quien lo ha resuelto de forma elegante y sencilla.

En este caso aquí hay una perfecta solución a un problema engorroso de comparación de fechas. Ya que el formato DateTime incluye información horaria y hay que complicar la comparación delimitandola desde  las 0:00:00 hasta las 23:59:59 para evitar errores en el filtro. Típico pedir todos los registros del dia XX y que descarte todos aquellos que sean posteriores a las 00:00:00.

En el post de Richard Chamorro se hace referencia a la solución de Anatoly Lubarsky La cual es, simplemente brillante.
DATEADD(dd, 0, DATEDIFF(dd, 0, CAMPO_FECHA))

De esta forma se descarta la parte horaria de los valores de las fecha y así, por ejemplo, para comprobar que una fecha está dentro del día de hoy simplemente realizo la siguiente comprobación:

DATEADD(dd, 0, DATEDIFF(dd, 0, @Fecha)) = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

Espero que os sea tan util como a mi.

No hay comentarios: