Selecionar registros AGORA () -1 Dia

138

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?

user1092780
fonte

Respostas:

269

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
Jon Skeet
fonte
como chegar agora a isso ... média da data atual para todos os registros disponíveis em db. ? isso é apenas por um dia, mas eu preciso gravar agora todas as palavras. @jon
Muddasir Abbas
Considera a hora local do usuário quando os registros estão no UTC?
Adry
1
@ Adry: duvido, mas você deve testar com cuidado.
Jon Skeet
62

Esteja ciente de que o resultado pode ser um pouco diferente do esperado.

NOW() retorna um DATETIME .

E INTERVALfunciona 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.

William Dan Terry
fonte
Up vote for CURDATE ()
rob
17

Você está quase lá: é NOW() - INTERVAL 1 DAY

dasblinkenlight
fonte
8

Certamente você pode:

SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
Marco Miltenburg
fonte
Confuso usando DATE_ADDentão -1 day.
Andrew Atkinson
8

Não encontrou nenhuma resposta corretamente usando DATE_ADDou 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)
Andrew Atkinson
fonte
1

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
Michael de Oz
fonte