Saat bekerja dengan fungsi yang mengembalikan tanggal, Oracle Database mengembalikan tanggal ini berdasarkan nilai NLS_DATE_FORMAT
parameter.
Ada juga NLS_TIMESTAMP_FORMAT
parameter dan NLS_TIMESTAMP_TZ_FORMAT
parameter, keduanya memiliki topeng format datetime yang dapat ditentukan secara terpisah.
Semua parameter ini memiliki nilai default yang diturunkan dari NLS_TERRITORY
parameter (yang secara default, bergantung pada sistem operasi).
Jadi, untuk mengubah format tanggal sesi, Anda dapat memperbarui NLS_TERRITORY
parameter, atau secara eksplisit memperbarui setiap parameter satu per satu.
Artikel ini memberikan contoh pemeriksaan dan perubahan nilai ini, serta melihat hasilnya.
Periksa Pengaturan Awal
Pertama, mari periksa setelan saya saat ini untuk NLS_DATE_FORMAT
parameter:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
'NLS_TERRITORY',
'NLS_DATE_FORMAT',
'NLS_TIMESTAMP_FORMAT',
'NLS_TIMESTAMP_TZ_FORMAT'
);
Hasil:
PARAMETER VALUE __________________________ _________________________________ NLS_TERRITORY AUSTRALIA NLS_DATE_FORMAT DD/MON/RR NLS_TIMESTAMP_FORMAT DD/MON/RR HH12:MI:SSXFF AM NLS_TIMESTAMP_TZ_FORMAT DD/MON/RR HH12:MI:SSXFF AM TZR
Nilai NLS_TERRITORY
saya parameternya adalah AUSTRALIA
, dan karenanya berbagai parameter datetime menggunakan model format default untuk Australia.
Nilai ini mempengaruhi bagaimana tanggal diformat saat kita menggunakan fungsi tertentu. Misalnya, berikut adalah contoh penggunaan SYSDATE
untuk mengembalikan tanggal saat ini:
SELECT SYSDATE
FROM DUAL;
Hasil:
04/AUG/21
Ubah Pengaturan
Kita dapat menggunakan ALTER SESSION
pernyataan untuk mengubah pengaturan parameter ini.
Kami memiliki opsi untuk mengubah setiap parameter ini satu per satu, atau mengubah NLS_TERRITORY
parameter, yang secara otomatis memperbarui setiap parameter tersebut secara implisit.
Ubah NLS_TERRITORY
Parameter
Berikut ini contoh mengubah NLS_TERRITORY
parameter:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
Hasil:
Session altered.
Mari kita periksa nilai barunya:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
'NLS_TERRITORY',
'NLS_DATE_FORMAT',
'NLS_TIMESTAMP_FORMAT',
'NLS_TIMESTAMP_TZ_FORMAT'
);
Hasil:
PARAMETER VALUE __________________________ _______________________________ NLS_TERRITORY AMERICA NLS_DATE_FORMAT DD-MON-RR NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
Jadi kita dapat melihat bahwa, tidak hanya wilayah yang diperbarui, berbagai parameter datetime juga telah diperbarui.
Ubah Hanya NLS_DATE_FORMAT
Parameter
Berikut ini contoh memperbarui NLS_DATE_FORMAT
parameter:
ALTER SESSION SET NLS_DATE_FORMAT = 'rr-mm-dd';
Hasil:
Session altered.
Mari kita periksa nilai barunya:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
'NLS_TERRITORY',
'NLS_DATE_FORMAT',
'NLS_TIMESTAMP_FORMAT',
'NLS_TIMESTAMP_TZ_FORMAT'
);
Hasil:
PARAMETER VALUE __________________________ _______________________________ NLS_TERRITORY AMERICA NLS_DATE_FORMAT rr-mm-dd NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
Seperti yang diharapkan, hanya NLS_DATE_FORMAT
parameter telah diubah ke format baru. Yang lainnya tetap tidak berubah.
Sekarang ketika kita menjalankan SYSDATE
, tanggal dikembalikan dalam format baru kami, tetapi SYSTIMESTAMP
mengembalikannya menggunakan NLS_TIMESTAMP_TZ_FORMAT
format, yang tidak berubah:
SELECT
SYSDATE,
SYSTIMESTAMP
FROM DUAL;
Hasil:
SYSDATE SYSTIMESTAMP ___________ _________________________________________ 21-08-09 09-AUG-21 07.22.35.402453000 PM -04:00