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?

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

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.


Suara untuk CURDATE ()
merampok



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)

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.