Se os registros estiverem armazenados como DATETIME, isso selecionará todos os registros da data anterior, desconsiderando a parte da hora. Executada em 23:59:59, a consulta retornará todos os registros nas últimas 48horas, não 24.
Quassnoi
18
Se você deseja selecionar as últimas 24 horas de um campo de data e hora, substitua 'curate ()' por 'now ()'. Isso também inclui o tempo.
Haentz
564
Em MySQL:
SELECT*FROM mytable
WHERE record_date >= NOW()- INTERVAL 1 DAY
Em SQL Server:
SELECT*FROM mytable
WHERE record_date >= DATEADD(day,-1, GETDATE())
Em Oracle:
SELECT*FROM mytable
WHERE record_date >= SYSDATE -1
Em PostgreSQL:
SELECT*FROM mytable
WHERE record_date >= NOW()-'1 day'::INTERVAL
Em Redshift:
SELECT*FROM mytable
WHERE record_date >= GETDATE()-'1 day'::INTERVAL
Em SQLite:
SELECT*FROM mytable
WHERE record_date >= datetime('now','-1 day')
Esta é a resposta que melhor responde à pergunta específica: Como retornar as 24 HORAS ANTERIORES (a partir do momento presente), em oposição às 24 anteriores (o que sugere todos os resultados para o dia anterior). Isso respondeu aos meus requisitos, isso me deixa com votos positivos. EDIT: Vale a pena mencionar a tabela nome_tabela.a_data deve ser um carimbo de data / hora.
Anthony Cregan
8
Qual SQL não foi especificado, SQL 2005/2008
SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())
Se você estiver nos tipos de datas de precisão aumentada de 2008, use a nova função sysdatetime (), igualmente, se usar o horário UTC, troque internamente as chamadas UTC.
Se o registro de data e hora considerado for um registro de data e hora do UNIX, você precisa primeiro converter o registro de data e hora do UNIX (por exemplo, 1462567865) para registro de data e hora do mysql
Isso assume que o mecanismo que está sendo usado é o MySQL, pois FROM_UNIXTIME () é uma função do MySQL. Para uso do SQL Server: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) se você precisar de precisão de milissegundos no SQL Server 2016 e posterior: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
Este é o único que funcionou para mim no mySQL. Por alguma razão, quando tentei SELECT * FROM myTable WHERE myDate> DATE_SUB ('2018-06-13 00:00:00', INTERVAL 24 HORAS); Eu ainda estava recebendo discos de 2018-06-14.
JDub9
1
SELECT*FROM tableName
WHERE datecolumn >= dateadd(hour,-24,getdate())
por que você precisaria adicionar "e order_date <= GETDATE ()" quando você já está procurando as últimas 24 horas do momento da exeção dessa consulta? Realmente não faz sentido ter essa parte na cláusula where quando você já tiver mencionado "GETDATE" na primeira. É melhor que você faça "order_date> = DateAdd (DAY, -1, GETDATE ())" é isso!
Respostas:
fonte
DATETIME
, isso selecionará todos os registros da data anterior, desconsiderando a parte da hora. Executada em23:59:59
, a consulta retornará todos os registros nas últimas48
horas, não24
.Em
MySQL
:Em
SQL Server
:Em
Oracle
:Em
PostgreSQL
:Em
Redshift
:Em
SQLite
:Em
MS Access
:fonte
function getdate() does not exist
. Substituiucurrent_date
e funcionou bem.CURDATE()
que não retorna uma data com uma parte de tempo, então ela vai para00
. Corrigi-o usando emNOW()
vez deCURDATE()
.MySQL:
O INTERVALO pode ser em ANO, MÊS, DIA, HORA, MINUTO, SEGUNDO
Por exemplo, nos últimos 10 minutos
fonte
Qual SQL não foi especificado, SQL 2005/2008
Se você estiver nos tipos de datas de precisão aumentada de 2008, use a nova função sysdatetime (), igualmente, se usar o horário UTC, troque internamente as chamadas UTC.
fonte
no postgres, assumindo que seu tipo de campo seja um carimbo de data / hora:
fonte
Se o registro de data e hora considerado for um registro de data e hora do UNIX, você precisa primeiro converter o registro de data e hora do UNIX (por exemplo, 1462567865) para registro de data e hora do mysql
fonte
SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField)
se você precisar de precisão de milissegundos no SQL Server 2016 e posterior:SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
fonte
Olá, agora que passou muito tempo desde o post original, mas tenho um problema semelhante e quero compartilhar.
Eu tenho um campo de data e hora com este formato AAAA-MM-DD hh: mm: ss e quero acessar um dia inteiro, então aqui está a minha solução.
A função DATE (), no MySQL: Extrai a parte da data de uma expressão de data ou data e hora.
com isso eu recebo todas as linhas registradas neste dia.
Espero que ajude alguém.
fonte
fonte
No SQL Server (nas últimas 24 horas):
fonte