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