Khi làm việc với các hàm trả về ngày tháng, Cơ sở dữ liệu Oracle trả về những ngày tháng này dựa trên giá trị của NLS_DATE_FORMAT
tham số.
Ngoài ra còn có một NLS_TIMESTAMP_FORMAT
và một NLS_TIMESTAMP_TZ_FORMAT
, cả hai đều có mặt nạ định dạng ngày giờ có thể được chỉ định riêng.
Tất cả các tham số này đều có giá trị mặc định bắt nguồn từ NLS_TERRITORY
(theo mặc định, phụ thuộc vào hệ điều hành).
Vì vậy, để thay đổi định dạng ngày cho phiên của bạn, bạn có thể cập nhật NLS_TERRITORY
hoặc cập nhật rõ ràng từng tham số riêng lẻ.
Bài viết này cung cấp các ví dụ về việc kiểm tra và thay đổi các giá trị này cũng như xem kết quả.
Kiểm tra cài đặt ban đầu
Trước tiên, hãy kiểm tra cài đặt hiện tại của tôi cho NLS_DATE_FORMAT
tham số:
CHỌN THÔNG SỐ, VALUEFROM V $ NLS_PARAMETERSWHERE THAM SỐ TRONG ('NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT');
Kết quả:
GIÁ TRỊ THÔNG SỐ __________________________ _________________________________ 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 TZRGiá trị của
NLS_TERRITORY
của tôi tham số làAUSTRALIA
và vì vậy các tham số ngày giờ khác nhau sử dụng mô hình định dạng mặc định cho Úc.Giá trị này ảnh hưởng đến cách định dạng ngày khi chúng ta sử dụng một số hàm nhất định. Ví dụ:đây là một ví dụ về việc sử dụng
SYSDATE
để trả về ngày hiện tại:CHỌN SYSDATEFROM KÉP;
Kết quả:
04 / AUG / 21Thay đổi cài đặt
Chúng ta có thể sử dụng
ALTER SESSION
để thay đổi cài đặt cho các tham số này.Chúng tôi có tùy chọn thay đổi từng tham số này riêng lẻ hoặc thay đổi
NLS_TERRITORY
tham số này tự động cập nhật ngầm định từng tham số đó.Thay đổi
NLS_TERRITORY
Tham sốĐây là ví dụ về việc thay đổi
NLS_TERRITORY
tham số:ALTER SESSION SET NLS_TERRITORY ='AMERICA';
Kết quả:
Đã thay đổi phiên.Hãy kiểm tra các giá trị mới:
CHỌN THÔNG SỐ, VALUEFROM V $ NLS_PARAMETERSWHERE THÔNG SỐ TRONG ('NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT');
Kết quả:
GIÁ TRỊ THÔNG SỐ __________________________ _______________________________ 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 TZRAMVì vậy, chúng ta có thể thấy rằng, không chỉ lãnh thổ được cập nhật, các thông số ngày giờ khác nhau cũng đã được cập nhật.
Chỉ thay đổi
NLS_DATE_FORMAT
Tham sốĐây là ví dụ về cập nhật
NLS_DATE_FORMAT
tham số:ALTER SESSION SET NLS_DATE_FORMAT ='rr-mm-dd';
Kết quả:
Đã thay đổi phiên.Hãy kiểm tra giá trị mới:
CHỌN THÔNG SỐ, VALUEFROM V $ NLS_PARAMETERSWHERE PARAMETER IN ('NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_SZ_TAT', 'NLS_TIMESTAMP_SZ_TAT', 'NLATIMESTAMP_SZ_TAT' ');
Kết quả:
GIÁ TRỊ THÔNG SỐ __________________________ _______________________________ 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 TZRSANhư mong đợi, chỉ
NLS_DATE_FORMAT
tham số đã được thay đổi thành định dạng mới. Những cái khác vẫn không thay đổi.Bây giờ khi chúng ta chạy
SYSDATE
, ngày được trả về ở định dạng mới của chúng tôi, nhưngSYSTIMESTAMP
trả về nó bằng cách sử dụngNLS_TIMESTAMP_TZ_FORMAT
định dạng không thay đổi:CHỌN SYSDATE, SYSTIMESTAMPFROM KÉP;
Kết quả:
SYSATE SYSTIMESTAMP ___________ _________________________________________ 21-08-09 09-AUG-21 07.22.35.402453000 PM -04:00