now - insert getdate sql
Redondeo de SQL DateTime a la medianoche (8)
Estoy teniendo un pequeño problema con mi consulta SQL. Estoy usando la función GETDATE, sin embargo, digamos que ejecuto el script a las 5 p. M. ¿Cómo puedo hacer que recupere los registros de todo el 12/12/2011 - 18/12/2011 básicamente ignorar el tiempo.
Mi guion:
WHERE Orders.OrderStatus = ''Shipped''
AND Orders.ShipDate > (GETDATE()-6)
Aquí está lo 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 anteriores o posteriores a 1900-1-1, y Convert Datetime lo devuelve a esa fecha a 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 está truncando ... Pero creo que eso es lo que se está preguntando. (Para redondear, agregue uno y trunque ... y eso tampoco es redondear, ese es el techo, pero nuevamente lo más probable es que desee. Para realmente redondear agregue .5 (¿eso funciona?) Y trunque.
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 se aplican también a 2005.
Como mencionó @BassamMehanni, puede convertir como DATE 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 en realidad puede ser solo GetDate()
, pero Less Than DateX
este formato como un ejemplo de Less Than DateX
para evitar tener que lanzar el dateField a una FECHA, mejorando así enormemente el rendimiento.
Si tienes 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)
En SQL Server 2008 y versiones posteriores, puede convertir DateTime
en una Date
, lo que elimina el elemento de tiempo.
WHERE Orders.OrderStatus = ''Shipped''
AND Orders.ShipDate >= (cast(GETDATE()-6 as date))
En SQL Server 2005 y más abajo puedes usar:
WHERE Orders.OrderStatus = ''Shipped''
AND Orders.ShipDate >= DateAdd(Day, Datediff(Day,0, GetDate() -6), 0)
Esto puede parecer barato pero funciona para mí
SELECCIONAR CONVERTIR (DATETIME, IEFT (CONVERT (VARCHAR, @ dateFieldOrVariable, 101), 10) + ''00: 00: 00.000'')
Intenta usar esto.
WHERE Orders.OrderStatus = ''Shipped''
AND Orders.ShipDate >= CONVERT(DATE, GETDATE())
Por lo general hago
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
--
-- 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
SELECT getdate()
Resultado: 2012-12-14 16: 03: 33.360
SELECT convert(datetime,convert(bigint, getdate()))
Resultado 2012-12-15 00: 00: 00.000