Rumah > pangkalan data > tutorial mysql > Apakah Format Tarikh Lalai dalam Oracle dan Mengapakah Ia Tidak Konsisten?

Apakah Format Tarikh Lalai dalam Oracle dan Mengapakah Ia Tidak Konsisten?

DDD
Lepaskan: 2025-01-16 16:36:09
asal
924 orang telah melayarinya

What's the Default Date Format in Oracle and Why is it Inconsistent?

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:

  • Tarikh tersurat: TARIKH '2018-01-25'
  • Cap masa literal: TIMESTAMP '2018-01-25 01:23:45'
  • Penukaran TO_DATE eksplisit: TO_DATE('25-JUN-18', 'DD-MON-RR')

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan