solo now funciones fecha ejemplo current sql sql-server sql-server-2005 getdate

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