Stack Overflow en español Asked by Patricio Moracho on December 5, 2021
Tengo una columna DATETIME
con horas, minutos y segundos, por ejemplo:
SELECT GETDATE()
2020-07-22 20:57:15.983
Y a los efectos de las consultas que necesito realizar, me resultaría mucho más cómodo que este dato solo tenga información de la fecha. ¿Como convertir entonces un DATETIME
a una fecha sin hora pero manteniendo el tipo de dato?
yo tenía el mismo problema y lo que hice fue que lo trunqué de esta manera y solo me muestra día y mes:
FORMAT (date, 'dd-MM')
Answered by Herly Fiorella Mejias on December 5, 2021
Una manera más estándar de lograrlo es utilizar la función cast()
para convertir a Date
y luego de vuelta a DateTime
:
select cast(cast(getdate() as date) as datetime)
Desde mi punto de vista es preferible escribirlo de esta forma porque la función cast()
está soportada en un gran número de motores, y la tendencia es a que cada vez la soporten más.
Otra forma de lograr el resultado podría ser convertir el valor a un número de coma flotante, valiéndose del hecho que internamente la fecha se almacena de esta forma, quitarle los decimales, por ejemplo utilizando la función floor()
y convertirlo de nuevo a DateTime
:
select cast(floor(cast(getdate() as float)) as datetime)
Esto funcionará en sql-server, oracle, firebird y otros motores que internamente almacenan la fecha como números de coma flotante.
Answered by jachguate on December 5, 2021
Hasta versión 2008 de Sql Server, solo disponíamos del tipo DATETIME
por lo que "truncar" la parte horaria de una columna había que hacerla, por ejemplo así:
select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Este un método un poco extraño de leer pero sumamente efectivo y rápido. Obtenemos la diferencia en días desde el día 0 y el actual y sumamos esa cantidad al día 0, que en el caso de SQL Server es el 01-01-1900, esto "elimina" la parte horaria de cualquier fecha.
Otro de los métodos clásicos es pasar por un VARCHAR
formateado sin la hora y luego volverlo a convertir en un DATETIME
:
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 120) , 120)
A partir de la versión antes mencionada, disponemos del tipo de dato DATE
por lo que también podemos hacer esto:
SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()))
Para más información:
Answered by Patricio Moracho on December 5, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP