Existe uma maneira em uma instrução MySQL para ordenar registros (através de um carimbo de data) por> = NOW () -1 para que todos os registros de um dia antes de hoje para o futuro sejam selecionados?
Existe uma maneira em uma instrução MySQL para ordenar registros (através de um carimbo de data) por> = NOW () -1 para que todos os registros de um dia antes de hoje para o futuro sejam selecionados?
Respostas:
A julgar pela documentação das funções de data / hora , você poderá fazer algo como:
SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
Esteja ciente de que o resultado pode ser um pouco diferente do esperado.
NOW()
retorna um DATETIME
.
E INTERVAL
funciona como nomeado, por exemploINTERVAL 1 DAY = 24 hours
.
Portanto, se seu script estiver programado para rodar 03:00
, ele perderá ofirst three hours of records from the 'oldest' day
.
Para obter o dia inteiro, use CURDATE() - INTERVAL 1 DAY
. Isso voltará ao início do dia anterior, independentemente de quando o script for executado.
Você está quase lá: é NOW() - INTERVAL 1 DAY
Certamente você pode:
SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
DATE_ADD
então -1 day
.
Não encontrou nenhuma resposta corretamente usando DATE_ADD
ou DATE_SUB
:
Subtrair 1 dia de NOW()
...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)
Adicione 1 dia a partir de NOW()
...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)
quando o campo de pesquisa é o carimbo de data e hora e você deseja encontrar registros de 0 horas ontem e 0 horas hoje, use construction
MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))
em vez de
now() - interval 1 day