Rumah  >  Artikel  >  pangkalan data  >  Mengapa Perbandingan Tarikh MySQL dengan date_format Menghasilkan Keputusan Yang Tidak Dijangka?

Mengapa Perbandingan Tarikh MySQL dengan date_format Menghasilkan Keputusan Yang Tidak Dijangka?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-24 11:15:29632semak imbas

Why Is MySQL Date Comparison with date_format Yielding Unexpected Results?

Membandingkan Tarikh MySQL dengan format_date

Walaupun mencuba beberapa kaedah perbandingan tarikh, pengguna menemui hasil yang tidak dijangka. Mereka cuba membandingkan tarikh yang diformatkan sebagai '%d-%m-%Y' tetapi memasukkan rekod yang salah dalam set keputusan.

Isu ini berpunca daripada membandingkan rentetan dan bukannya tarikh. Fungsi date_format menukar tarikh kepada rentetan, menjadikan perbandingan itu terdedah kepada susunan leksikografik. Sebagai contoh, '28-10-2012' adalah lebih besar mengikut abjad daripada '02-11-2012', justeru ia dimasukkan dalam set keputusan walaupun secara kronologi lebih awal.

Untuk menyelesaikan masalah ini, perbandingan harus dilakukan pada tarikh dan bukannya rentetan. Fungsi tarikh boleh digunakan untuk mengekstrak komponen tarikh daripada medan DATETIME atau DATE. Dengan membandingkan tarikh yang diekstrak, susunan kronologi dipastikan.

Contohnya:

<code class="mysql">select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';</code>

Dalam pertanyaan ini, tarikh(masa mula) mengekstrak tarikh daripada medan masa mula, yang kemudiannya dibandingkan dengan tarikh yang ditentukan dalam format YYYY-MM-DD. Fungsi date_format digunakan hanya untuk memformatkan hasil.

Jika masa mula ialah medan DATETIME, pertimbangkan untuk menggunakan:

<code class="mysql">select date_format(date(starttime),'%d-%m-%Y') from data
where starttime >= '2012-11-02 00:00:00';</code>

Pertanyaan ini mengelakkan penukaran tarikh berulang kerana perbandingan dilakukan terus pada Medan DATETIME.

Ingat, standard ISO-8601 mengesyorkan menggunakan 'YYYY-MM-DD' sebagai format tarikh, tetapi kod yang disediakan mematuhi format '%d-%m-%Y' yang ditentukan pengguna .

Atas ialah kandungan terperinci Mengapa Perbandingan Tarikh MySQL dengan date_format Menghasilkan Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn