Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Dari stempel waktu dalam SQL, memilih catatan dari hari ini, kemarin, minggu ini, bulan ini dan antara dua tanggal php mysql

Jika Anda memilih berdasarkan tanggal saja, dasarkan perhitungan Anda pada CURDATE (yang hanya mengembalikan tanggal) daripada NOW (yang mengembalikan tanggal dan waktu). Contoh berikut akan menangkap semua waktu dalam rentang hari:

  • Hari ini:WHERE timestamp >= CURDATE()
  • Kemarin:WHERE timestamp >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND timestamp < CURDATE()
  • Bulan ini:WHERE timestamp >= DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE())-1 DAY)
  • Antara dua tanggal 3 Juni 2013 dan 7 Juni 2013 (perhatikan bagaimana tanggal akhir ditetapkan sebagai 8 Juni, bukan 7 Juni):WHERE timestamp >= '2013-06-03' AND timestamp < '2013-06-08'

"Minggu ini" tergantung pada hari mana Anda memulai minggu; Aku akan menyerahkan itu padamu. Anda dapat menggunakan DAYOFWEEK berfungsi untuk mengubah CURDATE() ke rentang yang tepat.

Tambahan :Jenis kolom OP adalah INTEGER , menyimpan stempel waktu UNIX, dan jawaban saya mengasumsikan jenis kolomnya adalah TIMESTAMP . Inilah cara melakukan semua hal yang sama dengan nilai stempel waktu UNIX dan tetap mempertahankan pengoptimalan jika kolom diindeks (seperti jawaban di atas akan dilakukan jika TIMESTAMP kolom diindeks)...

Pada dasarnya, solusinya adalah dengan membungkus tanggal awal dan/atau akhir di UNIX_TIMESTAMP fungsi:

  • Hari ini:WHERE timestamp >= UNIX_TIMESTAMP(CURDATE())
  • Kemarin:WHERE timestamp >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AND timestamp < UNIX_TIMESTAMP(CURDATE())
  • Bulan ini:WHERE timestamp >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE())-1 DAY))
  • Antara dua tanggal 3 Juni 2013 dan 7 Juni 2013 (perhatikan bagaimana tanggal akhir ditetapkan sebagai 8 Juni, bukan 7 Juni):WHERE timestamp >= UNIX_TIMESTAMP('2013-06-03') AND timestamp < UNIX_TIMESTAMP('2013-06-08')



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Database di MySQL

  2. Tidak ada entitas Doctrine ORM yang dipetakan menurut konfigurasi saat ini

  3. Kesalahan sintaks prosedur tersimpan MySQL setelah BEGIN

  4. Memantau Kinerja MySQL dengan ClusterControl

  5. PHP mySQL - Bisakah Anda mengembalikan array terkait dengan indeks angka?