Estou procurando uma boa instrução SQL para selecionar todas as linhas do dia anterior de uma tabela. A tabela contém uma coluna datetime. Estou usando o SQL Server 2005.
Estou procurando uma boa instrução SQL para selecionar todas as linhas do dia anterior de uma tabela. A tabela contém uma coluna datetime. Estou usando o SQL Server 2005.
Respostas:
comece hoje sem tempo:
SELECT dateadd(day,datediff(day,0,GETDATE()),0)
comece ontem sem tempo:
SELECT dateadd(day,datediff(day,1,GETDATE()),0)
consulta para todas as linhas de ontem:
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), obtenho:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
Para obter o valor "today" no SQL:
convert(date, GETDATE())
Para obter "ontem":
DATEADD(day, -1, convert(date, GETDATE()))
Para obter "hoje menos X dias": mude -1 para -X.
Portanto, para todas as linhas de ontem, você obtém:
select * from tablename
where date >= DATEADD(day, -1, convert(date, GETDATE()))
and date < convert(date, GETDATE())
Parece que a resposta óbvia estava faltando. Para obter todos os dados de uma tabela (Ttable) onde a coluna (DatetimeColumn) é um datetime com um timestamp, a seguinte consulta pode ser usada:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
Isso pode ser facilmente alterado para hoje, mês passado, ano passado, etc.
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)o valor de DATEDIFF () em cada linha
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
É um tópico muito antigo, mas aqui está minha opinião sobre ele. Em vez de 2 cláusulas diferentes, uma maior que e menor que. Eu uso a sintaxe abaixo para selecionar registros de uma data. Se você quiser um intervalo de datas, as respostas anteriores são o caminho a percorrer.
SELECT * FROM TABLE_NAME WHERE
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
No caso acima, X será -1 para os registros de ontem
Isso deve servir:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
No SQL Server, faça assim:
where cast(columnName as date) = cast(getdate() -1 as date)
Você deve converter ambos os lados da expressão para a data para evitar problemas com a formatação de hora.
Se você precisa controlar o intervalo com mais detalhes, você deve tentar algo como:
declare @start datetime = cast(getdate() - 1 as date)
declare @end datetime = cast(getdate() - 1 as date)
set @end = dateadd(second, 86399, @end)
Outra forma de dizer "Ontem" ...
Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))
Isso provavelmente não funcionará bem em 1º de janeiro, bem como no primeiro dia de cada mês. Mas na hora é eficaz.
Bem, é mais fácil lançar a coluna datetime para a data e do que comparar.
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
subdate (now (), 1) irá retornar a data e hora de ontem O código abaixo irá selecionar todas as linhas com a data e hora de ontem
Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
SELECT *retornará todas as datas com os horários originais.