Tengo un pequeño problema con mi consulta SQL. Estoy usando la función GETDATE, sin embargo, digamos que ejecuto la secuencia de comandos a las 5 p.m., obtendrá registros entre el 12/12/2011 5 p.m. y el 18/12/2011 5 p.m. ¿Cómo puedo hacer que muestre los registros de todo el 12/12/2011 - 18/12/2011 básicamente ignorar el tiempo?
Mi guión:
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate > (GETDATE()-6)
sql
sql-server
sql-server-2005
getdate
henryaaron
fuente
fuente
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, agrega .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.
fuente
where [ScanDate] >= convert(datetime, datediff(day, 0, getdate())) and [ScanDate] < convert(datetime, datediff(day, -1, getdate()))
-- -- 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
fuente
SELECT getdate()
Resultado: 2012-12-14 16: 03: 33.360
SELECT convert(datetime,convert(bigint, getdate()))
Resultado 2012-12-15 00: 00: 00.000
fuente
Como mencionó @BassamMehanni, puede transmitir como FECHA en SQL Server 2008 en adelante ...
SELECT * FROM yourTable WHERE dateField >= CAST(GetDate() - 6 AS DATE) AND dateField < CAST(GetDate() + 1 AS DATE)
La segunda condición puede ser justa
GetDate()
, pero estoy mostrando este formato como un ejemploLess Than DateX
para evitar tener que convertir el campo de fecha en una FECHA también, mejorando así enormemente el rendimiento.Si estás en 2005 o menos, puedes usar esto ...
SELECT * FROM yourTable WHERE dateField >= DATEADD(DAY, DATEDIFF(DAY, 0, GetDate()) - 6, 0) AND dateField < DATEADD(DAY, DATEDIFF(DAY, 0, GetDate()) + 1, 0)
fuente
Intente usar esto.
fuente
Esto puede parecer barato pero me está funcionando
fuente
Puede convertir la fecha y hora en una fecha y luego volver a una fecha y hora. Esto restablecerá la marca de tiempo.
fuente
Yo suelo hacer
SELECT * FROM MyTable WHERE CONVERT(VARCHAR, MyTable.dateField, 101) = CONVERT(VARCHAR, GETDATE(), 101)
si está utilizando SQL SERVER 2008, puede hacer
SELECT * FROM MyTable WHERE CAST(MyTable.dateField AS DATE) = CAST(GETDATE() AS DATE)
Espero que esto ayude
fuente
Podría redondear el tiempo.
El uso a
ROUND
continuación lo redondeará a la medianoche.fuente