Menggabungkan Medan Tarikh untuk Perbandingan dalam MySQL
Dalam aplikasi dengan penapis carian berasaskan tarikh, ia boleh menjadi mencabar untuk bekerja dengan skema pangkalan data yang menyimpan komponen tarikh dalam medan berasingan untuk hari, bulan dan tahun. Artikel ini menunjukkan cara untuk menggabungkan medan ini dan mencipta objek tarikh untuk perbandingan dengan julat tarikh yang ditentukan pengguna.
Pertimbangkan struktur jadual "tarikh" berikut:
CREATE TABLE `date` ( `deposition_id` varchar(11) NOT NULL default '', `day` int(2) default NULL, `month` int(2) default NULL, `year` int(4) default NULL, PRIMARY KEY (`deposition_id`) );
Untuk membina tarikh daripada medan ini, MySQL menyediakan fungsi berikut:
Untuk mencipta objek tarikh yang mewakili tarikh tertentu, langkah berikut boleh digunakan:
Gunakan MAKEDATE() untuk mencipta DATETIME objek untuk hari pertama tahun tertentu:
MAKEDATE(year, 1)
Tambah bulan pada objek DATETIME menggunakan DATE_ADD():
DATE_ADD(MAKEDATE(year, 1), INTERVAL (month)-1 MONTH)
Akhir sekali, tambahkan hari pada objek DATETIME menggunakan DATE_ADD():
DATE_ADD(..., INTERVAL (day)-1 DAY)
Dengan menggabungkan fungsi ini, objek tarikh yang lengkap boleh dibina daripada medan hari, bulan dan tahun individu. Objek tarikh ini kemudiannya boleh digunakan untuk perbandingan julat tarikh:
SELECT * FROM `date` WHERE DATE_ADD(DATE_ADD(MAKEDATE(year, 1), INTERVAL (month)-1 MONTH), INTERVAL (day)-1 DAY) BETWEEN '2013-01-01' AND '2014-01-01';
Pertanyaan ini akan mendapatkan semula semua rekod dalam jadual "tarikh" di mana tarikh gabungan berada dalam julat yang ditentukan. Dengan menggunakan gabungan MAKEDATE() dan DATE_ADD(), MySQL membolehkan pembangun memanipulasi dan membandingkan tarikh dengan berkesan, walaupun disimpan dalam medan berasingan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Medan Hari, Bulan dan Tahun yang Berasingan dalam MySQL untuk Melakukan Perbandingan Julat Tarikh?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!