2009-10-01 29 views

Respuesta

148

conseguir hoy en día no hay tiempo:

SELECT dateadd(day,datediff(day,0,GETDATE()),0) 

conseguir yestersday ningún momento:

SELECT dateadd(day,datediff(day,1,GETDATE()),0) 

consulta para todas las filas de sólo ayer:

select 
    * 
    from yourTable 
    WHERE YourDate >= dateadd(day,datediff(day,1,GETDATE()),0) 
     AND YourDate < dateadd(day,datediff(day,0,GETDATE()),0) 
+0

SI TAMBIÉN NECESITO TIEMPO? – Neo

+0

@ashuthinks, tu comentario no tiene sentido para mí. La pregunta original pregunta cómo obtener filas del día anterior. Para hacerlo, debe poder obtener la fecha de hoy solamente (sin tiempo) y la fecha de ayer solamente (sin tiempo). Utiliza estas fechas (intemporales) en la cláusula 'WHERE'. Sin embargo, el 'SELECT *' devolverá cualquier fecha con sus tiempos originales. –

+0

datediff da "Error de conteo de parámetros incorrecto". y http://stackoverflow.com/a/18926156/3007408 dice datediff puede usar solo 2 parámetros. ¿¿alguna solución?? – Sp0T

4

no puede probarlo ahora mismo, pero:

select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0) 
26

Para obtener el valor de "hoy" en SQL:

convert(date, GETDATE()) 

llegar "ayer" :

DATEADD(day, -1, convert(date, GETDATE())) 

Para obtener "hoy menos X días": cambie el -1 a -X.

Así que para todas las filas de ayer, se obtiene:

select * from tablename 
    where date >= DATEADD(day, -1, convert(date, GETDATE())) 
    and date < convert(date, GETDATE()) 
+0

"fecha" Tipo de datos no lo existe en SQL Server 2005. Cuando uso de fecha y hora en lugar de las estancias de valor de tiempo y el cálculo sucede no de 0 a.m. a 12 p.m., sino a partir del momento en que ejecuta la consulta – rudimenter

+1

Mi error. No vi que estuvieras lidiando con SQL Server 2005. De hecho, mi código funciona solo para SQL Server 2008. – Konamiman

+0

Siempre pensé que DATEADD (día, ....) era un desperdicio, solo agregue o reste la cantidad de días contra la fecha: _SELECCIONE GETDATE() - 1_ –

5

Es un hilo muy viejo, pero esta es mi opinión. En lugar de 2 cláusulas diferentes, una mayor que y menor que. Uso esta sintaxis a continuación para seleccionar registros de la fecha A. Si desea un rango de fechas, las respuestas anteriores son el camino a seguir.

SELECT * FROM TABLE_NAME WHERE 
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0 

En el caso anterior X será -1 para los registros de ayer

7
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY); 
1

Otra forma de decir que "Yesterday" ...

Select * from TABLE 
where Day(DateField) = (Day(GetDate())-1) 
and Month(DateField) = (Month(GetDate())) 
and Year(DateField) = (Year(getdate())) 

Esto posiblemente no va a funcionar bien el 1 de enero, así como el primer día de cada mes. Pero sobre la marcha es efectivo.

12

Parece que la respuesta obvia faltaba. Para obtener todos los datos de una tabla (TTable), donde la columna (DatetimeColumn) es una fecha y hora con una marca de tiempo de la siguiente consulta se puede utilizar:

SELECT * FROM Ttable 
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday 

Esto puede ser fácilmente cambiado a día de hoy, el mes pasado, el año pasado, etc.

1

esto debe hacerlo:

WHERE `date` = CURDATE() - INTERVAL 1 DAY 
1

En SQL Server lo hacen así:

where cast(columnName as date) = cast(getdate() -1 as date) 

Debe lanzar ambos lados de la expresión hasta la fecha para evitar problemas con el formato del tiempo.

Si necesita controlar el intervalo con más detalle, a continuación, usted debe intentar algo como:

declare @start datetime = cast(getdate() - 1 as date) 
declare @end datetime = cast(getdate() - 1 as date) 
set @end = dateadd(second, 86399, @end) 
Cuestiones relacionadas