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?

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

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.


Up vote for CURDATE ()
rob



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)

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.