Perbandingan Tarikh SQL Oracle: Mengelakkan Perangkap "Pengecam Tidak Sah"
Perbandingan tarikh yang cekap dalam Oracle SQL adalah penting, tetapi pemformatan yang tidak betul sering membawa kepada ralat seperti "JUN' pengecam tidak sah." Ralat ini timbul daripada membandingkan terus tarikh rentetan dengan tarikh berangka tanpa penukaran yang betul. Artikel ini menunjukkan cara untuk mengelakkan perangkap ini.
Kuncinya ialah pemformatan tarikh yang konsisten. Gunakan sama ada fungsi TO_DATE()
atau literal tarikh untuk perbandingan yang tepat.
Memanfaatkan TO_DATE()
Fungsi TO_DATE()
mengubah tarikh rentetan menjadi jenis data tarikh Oracle. Ia memerlukan dua argumen: rentetan tarikh dan model formatnya.
Sebagai contoh, untuk membandingkan employee_date_hired
dengan 20 Jun 1994:
<code class="language-sql">SELECT employee_id FROM Employee WHERE employee_date_hired > TO_DATE('20-JUN-1994', 'DD-MON-YYYY');</code>
Awas: TO_DATE()
pergantungan pada tetapan NLS_DATE_LANGUAGE
dan NLS_DATE_FORMAT
memperkenalkan potensi ketidakkonsistenan merentas persekitaran pangkalan data yang berbeza. Selain itu, tahun yang disingkatkan (mis., '94') boleh menjadi samar-samar.
Kebolehpercayaan Literal Kurma
Tersurat tarikh menawarkan pendekatan yang lebih dipercayai. Mereka mesti mengikut format YYYY-MM-DD dan mengecualikan komponen masa. Contohnya:
<code class="language-sql">SELECT employee_id FROM Employee WHERE employee_date_hired > DATE '1994-06-20';</code>
Nota: Jenis data tarikh Oracle termasuk masa; tarikh tanpa komponen masa menjadi lalai kepada YYYY-MM-DD 00:00:00. Literal cap masa (YYYY-MM-DD HH24:MI:SS[.FF0-9]) digunakan untuk memasukkan masa.
Pertimbangan Lanjut
Untuk mengira pekerja yang diambil selepas 20 Jun 1994:
<code class="language-sql">SELECT COUNT(*) FROM Employee WHERE employee_date_hired > DATE '1994-06-20';</code>
Walaupun anda boleh mengubah NLS_DATE_FORMAT
dan NLS_DATE_LANGUAGE
menggunakan ALTER SESSION
, ini biasanya tidak digalakkan kerana kemungkinan komplikasi dengan tetapan khusus sesi.
Amalan Terbaik untuk Perbandingan Tarikh Tepat
Penggunaan literal tarikh yang konsisten atau panggilan TO_DATE()
yang dinyatakan sepenuhnya, mengelakkan pergantungan pada tetapan NLS tersirat, memastikan pertanyaan Oracle SQL yang tepat dan mudah alih. Ini menghalang ralat perbandingan tarikh biasa dan menjamin hasil pertanyaan yang boleh dipercayai.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat 'Pengecam Tidak Sah' Apabila Membandingkan Tarikh dalam Oracle SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!