ŞİMDİ () -1 Gün arasındaki kayıtları seçin


139

MySQL deyiminde kayıtları (bir tarih damgasıyla)> = NOW () -1 olarak sıralamanın bir yolu var mı, böylece bugünden önceki günden geleceğe kadar tüm kayıtlar seçilir?

Yanıtlar:


271

Tarafından yargılanmak Tarih / saat işlevlerine belgelere gibi bir şey yapabilmelisiniz:

SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY

şimdi nasıl gidilir .. db'de bulunan tüm kayıtlar için geçerli tarih anlamına gelir. ? bu sadece bir günlük ama şimdi tüm kayıtlara ihtiyacım var. @jon
Muddasir Abbas

Kayıtlar UTC olduğunda kullanıcının yerel zamanını dikkate alıyor mu?
Adry

1
@Adry: Şüpheliyim ama dikkatlice test etmelisin.
Jon Skeet

63

Sonucun beklediğinizden biraz farklı olabileceğini unutmayın.

NOW()döndürür a DATETIME.

Ve INTERVALadlandırıldığı gibi çalışır, örn INTERVAL 1 DAY = 24 hours.

Senaryonuz çalışacak şekilde cron'd edilir Yani eğer 03:00, bu özleyeceğim first three hours of records from the 'oldest' day.

Bütün gün kullanmak için CURDATE() - INTERVAL 1 DAY. Bu, komut dosyasının ne zaman çalıştırıldığına bakılmaksızın önceki günün başlangıcına geri dönecektir.


CURDATE () için oylama Yukarı
soymak



8

DATE_ADDVeya kullanarak doğru bir yanıt görmedim DATE_SUB:

1 günü şundan çıkar: NOW()

...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)

1 gün ekleyin NOW()

...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)

1

arama alanı zaman damgası olduğunda ve dün 0 saat ve bugün 0 saatten kayıtları bulmak istediğinizde, yapıyı kullanın

MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))  

yerine

 now() - interval 1 day
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.