Perbandingan Tarikh MySQL dengan DATE_FORMAT()
Dalam artikel ini, kami akan meneroka cara melakukan perbandingan tarikh dalam MySQL menggunakan DATE_FORMAT() fungsi, menangani isu khusus yang dihadapi oleh pengguna semasa membandingkan tarikh.
Isunya
Pengguna menghadapi cabaran apabila membandingkan tarikh menggunakan DATE_FORMAT(). Tarikh disimpan dalam format berikut: '%d-%m-%Y', yang bukan format mudah diisih. Menggunakan pertanyaan di bawah, pengguna cuba membandingkan tarikh:
<code class="sql">SELECT DATE_FORMAT(DATE(starttime), '%d-%m-%Y') FROM data WHERE DATE_FORMAT(DATE(starttime), '%d-%m-%Y') >= '02-11-2012';</code>
Walau bagaimanapun, hasilnya termasuk '28-10-2012', yang tidak betul mengikut jangkaan pengguna.
Penyelesaian
Isu timbul kerana kami membandingkan rentetan dan bukannya tarikh. DATE_FORMAT() menukar tarikh kepada rentetan dan rentetan dibandingkan secara leksikografi. Dalam kes ini, '28-10-2012' adalah lebih besar daripada '02-11-2012' secara leksikografik, walaupun '02-11-2012' adalah tarikh kemudian.
Untuk membandingkan tarikh dengan tepat, kita perlu untuk membandingkannya sebagai tarikh, bukan rentetan. Kita boleh menggunakan fungsi DATE() untuk mengekstrak komponen tarikh daripada medan masa mula, dan kemudian membandingkan tarikh menggunakan operator >=, seperti yang ditunjukkan dalam pertanyaan berikut:
<code class="sql">SELECT DATE_FORMAT(DATE(starttime), '%d-%m-%Y') FROM data WHERE DATE(starttime) >= DATE('2012-11-02');</code>
Pertanyaan ini akan betul. bandingkan tarikh dan kecualikan '28-10-2012' daripada hasilnya.
Pertimbangan Tambahan
Perlu dipertimbangkan sama ada masa mula medan DATETIME boleh ditukar kepada DATE padang. Ini akan menghapuskan keperluan untuk penukaran berulang, yang berpotensi meningkatkan prestasi.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Perbandingan Tarikh Tepat dengan DATE_FORMAT() dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!