Apakah format tarikh lalai dalam pangkalan data Oracle?
Walaupun dokumentasi menentukan pelbagai format tarikh lalai, sebenarnya tiada format tetap untuk tarikh Oracle. Ia disimpan dalam format dalaman 7 bait, mewakili tahun (2 bait), bulan, hari, jam, minit dan saat (1 bait setiap satu).
Mengapa terdapat begitu banyak maklumat yang bercanggah?
Ini disebabkan oleh parameter sesi NLS_DATE_FORMAT. Parameter ini berfungsi sebagai format lalai dan akan berbeza-beza bergantung pada tetapan serantau pengguna. Oleh itu, ketidakkonsistenan format boleh berlaku apabila pengguna melakukan rentetan eksplisit kepada penukaran tarikh atau penukaran tersirat. Oracle, semasa rentetan tersirat kepada penukaran tarikh, cuba mentafsir rentetan berdasarkan parameter NLS_DATE_FORMAT, menyebabkan ketidakkonsistenan.
Amalan Disyorkan
Untuk mengelakkan kekeliruan, pendekatan berikut disyorkan:
Ubah suai NLS_DATE_FORMAT
Untuk menukar NLS_DATE_FORMAT dalam sesi, gunakan arahan berikut:
<code class="language-sql">ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';</code>
Nilai lalai NLS_DATE_FORMAT
Nilai lalai NLS_DATE_FORMAT bergantung pada parameter sesi NLS_TERRITORY, yang mewakili tempat pengguna. Untuk melihat format yang digunakan di kawasan yang berbeza, jalankan pertanyaan berikut:
<code class="language-sql">SET SERVEROUTPUT ON; VARIABLE cur REFCURSOR; DECLARE territories SYS.ODCIVARCHAR2LIST; formats SYS.ODCIVARCHAR2LIST := SYS.ODCIVARCHAR2LIST(); BEGIN SELECT value BULK COLLECT INTO territories FROM v$nls_valid_values WHERE parameter = 'TERRITORY' ORDER BY value; formats.EXTEND(territories.COUNT); FOR i IN 1 .. territories.COUNT LOOP EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_TERRITORY='''||territories(i)||''''; SELECT value INTO formats(i) FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT'; END LOOP; OPEN :cur FOR SELECT f.format AS format, LISTAGG(t.territory, ', ') WITHIN GROUP (ORDER BY t.territory) AS territories FROM (SELECT ROWNUM AS rn, COLUMN_VALUE AS territory FROM TABLE(territories)) t INNER JOIN (SELECT ROWNUM AS rn, COLUMN_VALUE AS format FROM TABLE(formats)) f ON (f.rn = t.rn) GROUP BY f.format; END; / PRINT :cur;</code>
Atas ialah kandungan terperinci Apakah Format Tarikh Lalai dalam Oracle dan Mengapakah Ia Tidak Konsisten?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!