perbandingan tarikh mysql yang cekap: Mengabaikan komponen masa
Selalunya, pertanyaan pangkalan data memerlukan membandingkan tarikh tanpa mempertimbangkan komponen masa. MySQL menawarkan beberapa fungsi untuk mencapai matlamat ini dengan cekap.
senario:
katakan anda mempunyai jadual dengan lajur players
jenis us_reg_date
. Matlamatnya adalah untuk memilih semua pemain yang mendaftarkan antara dua tarikh tertentu, memberi tumpuan semata -mata pada tarikh dan mengabaikan masa. DATETIME
Pendekatan yang tidak cekap (dan mengapa ia gagal):
Percubaan awal mungkin melibatkan menggunakan untuk mengekstrak bahagian tarikh: CONVERT
<code class="language-sql">SELECT * FROM `players` WHERE CONVERT(CHAR(10),us_reg_date,120) >= '2000-07-05' AND CONVERT(CHAR(10),us_reg_date,120) <= '2011-11-10';</code>
mengubah jenis data, menghalang penggunaan indeks yang cekap. Tambahan pula, perbandingan rentetan langsung tarikh boleh menyebabkan hasil yang tidak dijangka. CONVERT
Penyelesaian yang berkesan:
kaedah yang lebih cekap dan tepat memanfaatkan fungsi tarikh terbina dalam MySQL:
<code class="language-sql">SELECT * FROM players WHERE us_reg_date >= '2000-07-05' AND us_reg_date < DATE_ADD('2011-11-11', INTERVAL 0 DAY);</code>
. Bahagian penting menggunakan DATETIME
. Ini bijak memilih semua tarikh sehingga, tetapi tidak termasuk, tengah malam '2011-11-11', dengan berkesan merangkumi keseluruhan '2011-11-10'. Pendekatan ini mengekalkan kebolehgunaan indeks untuk prestasi pertanyaan optimum. Sebagai alternatif, < DATE_ADD('2011-11-11', INTERVAL 0 DAY)
boleh digunakan untuk niat yang lebih jelas tetapi mungkin sedikit kurang cekap daripada perbandingan langsung. DATE(us_reg_date)
Atas ialah kandungan terperinci Bagaimana untuk membandingkan tarikh dengan cekap dalam MySQL tanpa komponen masa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!