Obtener solo la fecha en una consulta de SQL
En SQL server, no hay una manera directa de obtener solo la parte de fecha de un campo “DateTime” y no existe unicamente un tipo de campo “Date”. Por lo tanto, si queremos obtener en una consulta, por ejemplo, los registros del dia de hoy, la siguiente consulta no funcionaria:
select * from tabla where fecha = GetDate()
Esto se debe a que GetDate() nos regresa la fecha y hora en que se ejecuta la consulta, no solo la fecha.
Para hacer posible esta comparacion, podriamos hacer que todas los DateTime se refirieran a las 0:00:00 del dia en cuestion, convirtiendo la fecha a Float y luego usando la funcion Floor de la siguiente manera:
Cast(Floor(Cast(fecha as Float))as DateTime)
De esta manera, primero convertimos la fecha, y con floor le quitamos todos los minutos y horas “sobrantes”. Despues convertimos de nuevo a DateTime, lo que nos regresara la fecha, con la hora 0. Para poder hacer la comparacion habria que convertir de la misma manera la funcion GetDate().
October 29th, 2008 at 2:00 pm
Excellent! efficient and very helpful
Thanks.
October 7th, 2009 at 1:13 am
It work very good.
March 18th, 2010 at 5:17 am
Uf!!
Esta SQL me saca todos los registros!!!
SELECT dbo.[zJM Acciones Por Hacer].*
FROM dbo.[zJM Acciones Por Hacer]
WHERE (PA_Fec = CAST(FLOOR(CAST(PA_Fec AS Float)) AS DateTime))
Y esta otra me funciona bien!!
SELECT dbo.[zJM Acciones Por Hacer].*
FROM dbo.[zJM Acciones Por Hacer]
WHERE (PA_Fec = CONVERT(nvarchar(10), GETDATE(), 103))
Que hago mal en la primera. Muchas gracias por tu ayuda.
August 18th, 2010 at 11:00 am
Excelente su aporte, la funcion de fecha me salvo de varios problemas…
Gracias