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.