Pilih catatan dari SEKARANG () -1 Hari

138

Apakah ada cara dalam pernyataan MySQL untuk memesan catatan (melalui cap tanggal) dengan> = SEKARANG () -1 sehingga semua catatan dari hari sebelum hari ini hingga masa depan dipilih?

pengguna1092780
sumber

Jawaban:

269

Dilihat oleh dokumentasi untuk fungsi tanggal / waktu , Anda harus dapat melakukan sesuatu seperti:

SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
Jon Skeet
sumber
cara mendapatkan sekarang untuk seterusnya .. berarti tanggal saat ini untuk semua catatan yang tersedia di db. ? ini hanya untuk satu hari tetapi saya perlu semua catatan sekarang untuk kata-kata. @jon
Muddasir Abbas
Apakah ini mempertimbangkan waktu lokal pengguna ketika catatan berada di UTC?
Adry
1
@Adry: Saya ragu, tetapi Anda harus menguji dengan hati-hati.
Jon Skeet
62

Ketahuilah bahwa hasilnya mungkin sedikit berbeda dari yang Anda harapkan.

NOW()mengembalikan a DATETIME.

Dan INTERVALberfungsi seperti namanya, mis INTERVAL 1 DAY = 24 hours.

Jadi, jika skrip Anda dijalankan pada cron 03:00, ia akan melewatkan first three hours of records from the 'oldest' day.

Untuk mendapatkan penggunaan sepanjang hari CURDATE() - INTERVAL 1 DAY. Ini akan kembali ke awal hari sebelumnya terlepas dari kapan skrip dijalankan.

William Dan Terry
sumber
Suara untuk CURDATE ()
merampok
17

Anda hampir sampai: itu NOW() - INTERVAL 1 DAY

dasblinkenlight
sumber
8

Tentu kamu bisa:

SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
Marco Miltenburg
sumber
Bingung menggunakan DATE_ADDitu -1 day.
Andrew Atkinson
8

Tidak melihat jawaban dengan benar menggunakan DATE_ADDatau DATE_SUB:

Kurangi 1 hari dari NOW()

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

Tambahkan 1 hari dari NOW()

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

ketika bidang pencarian adalah timestamp dan Anda ingin menemukan catatan dari 0 jam kemarin dan 0 jam hari ini menggunakan konstruksi

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

sebagai gantinya

 now() - interval 1 day
Michael de Oz
sumber