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?
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:
Dilihat oleh dokumentasi untuk fungsi tanggal / waktu , Anda harus dapat melakukan sesuatu seperti:
SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
Ketahuilah bahwa hasilnya mungkin sedikit berbeda dari yang Anda harapkan.
NOW()
mengembalikan a DATETIME
.
Dan INTERVAL
berfungsi 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.
Anda hampir sampai: itu NOW() - INTERVAL 1 DAY
Tentu kamu bisa:
SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
DATE_ADD
itu -1 day
.
Tidak melihat jawaban dengan benar menggunakan DATE_ADD
atau 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)
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