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().

4 Responses to “Obtener solo la fecha en una consulta de SQL”

  1. Edgarin Says:

    Excellent! efficient and very helpful
    Thanks.

  2. duru Says:

    It work very good.

  3. In Trainning Says:

    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.

  4. Patricio Araya Says:

    Excelente su aporte, la funcion de fecha me salvo de varios problemas…

    Gracias

Leave a Reply