Saltar al contenido

Redondeo de SQL DateTime a medianoche

Solución:

En SQL Server 2008 y versiones posteriores, puede convertir el DateTime a un Date, que elimina el elemento de tiempo.

WHERE Orders.OrderStatus="Shipped"  
AND Orders.ShipDate >= (cast(GETDATE()-6 as date))  

En SQL Server 2005 y versiones anteriores, puede usar:

WHERE Orders.OrderStatus="Shipped"  
AND Orders.ShipDate >= DateAdd(Day, Datediff(Day,0, GetDate() -6), 0)

Aquí está la cosa más simple que he encontrado

-- Midnight floor of current date

SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()))

DATEDIFF devuelve el número entero de días antes o desde 1900-1-1, y Convert Datetime lo devuelve amablemente a esa fecha a la medianoche.

Dado que DateDiff devuelve un número entero, puede usar sumar o restar días para obtener el desplazamiento correcto.

SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()) + @dayOffset)

Esto no es redondear esto es truncar … Pero creo que eso es lo que se pregunta. (Para redondear, agregar uno y truncar … y eso tampoco es redondear, que el techo, pero nuevamente lo más probable es que lo que quieras. Para realmente redondear, agregue .5 (¿funciona?) Y truncar.

Resulta que puede agregar .5 a GetDate () y funciona como se esperaba.

-- Round Current time to midnight today or midnight tomorrow

SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE() + .5))

Hice todas mis pruebas en SQL Server 2008, pero creo que estas funciones también se aplican a 2005.

--
-- SQL DATEDIFF getting midnight time parts 
--
SELECT GETDATE() AS Now, 
   Convert(DateTime, DATEDIFF(DAY, 0, GETDATE())) AS MidnightToday,
   Convert(DateTime, DATEDIFF(DAY, -1, GETDATE())) AS MidnightNextDay,
   Convert(DateTime, DATEDIFF(DAY, 1, GETDATE())) AS MidnightYesterDay
go
Now                   MidnightToday          MidnightNextDay        MidnightYesterDay     
 --------------------  ---------------------  ---------------------  --------------------- 
 8/27/2014 4:30:22 PM  8/27/2014 12:00:00 AM  8/28/2014 12:00:00 AM  8/26/2014 12:00:00 AM 
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *