Estoy buscando una buena declaración SQL para seleccionar todas las filas del día anterior de una tabla. La tabla contiene una columna de fecha y hora. Estoy usando SQL Server 2005.
Estoy buscando una buena declaración SQL para seleccionar todas las filas del día anterior de una tabla. La tabla contiene una columna de fecha y hora. Estoy usando SQL Server 2005.
Respuestas:
hoy no hay tiempo:
SELECT dateadd(day,datediff(day,0,GETDATE()),0)
obtener ayer sin tiempo:
SELECT dateadd(day,datediff(day,1,GETDATE()),0)
consulta para todas las filas de ayer:
select
*
from yourTable
WHERE YourDate >= dateadd(day,datediff(day,1,GETDATE()),0)
AND YourDate < dateadd(day,datediff(day,0,GETDATE()),0)
SELECT getdate(),dateadd(day,datediff(day,1,GETDATE()),0)
obtengo:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
Para obtener el valor "hoy" en SQL:
convert(date, GETDATE())
Para obtener "ayer":
DATEADD(day, -1, convert(date, GETDATE()))
Para obtener "hoy menos X días": cambie -1 por -X.
Entonces, para todas las filas de ayer, obtienes:
select * from tablename
where date >= DATEADD(day, -1, convert(date, GETDATE()))
and date < convert(date, GETDATE())
Parece que faltaba la respuesta obvia. Para obtener todos los datos de una tabla (Ttable) donde la columna (DatetimeColumn) es una fecha y hora con una marca de tiempo, se puede utilizar la siguiente consulta:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
Esto se puede cambiar fácilmente a hoy, el mes pasado, el año pasado, etc.
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
que tiene que evaluar el DATEDIFF () en cada fila
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
Es un hilo muy antiguo, pero aquí está mi opinión. En lugar de 2 cláusulas diferentes, una mayor que y una menor que. Utilizo la siguiente sintaxis para seleccionar registros de una fecha. Si desea un intervalo 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
Esto debería hacerlo:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
En SQL Server, haga lo siguiente:
where cast(columnName as date) = cast(getdate() -1 as date)
Debe convertir ambos lados de la expresión hasta la fecha para evitar problemas con el formato de hora.
Si necesita controlar el intervalo con más detalle, debería 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)
Otra forma de decirlo "Ayer" ...
Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))
Es posible que esto no funcione bien el 1 de enero, así como el primer día de cada mes. Pero sobre la marcha es eficaz.
Bueno, es más fácil convertir la columna de fecha y hora a la fecha y que comparar.
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
subdate (ahora (), 1) devolverá la marca de tiempo de ayer El siguiente código seleccionará todas las filas con la marca de tiempo de ayer
Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
SELECT *
devolverá las fechas con sus horas originales.