TransWikia.com

¿Cómo puedo truncar la parte horaria de un datetime?

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?

3 Answers

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 , , 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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP