Podczas pracy z funkcjami zwracającymi daty, Oracle Database zwraca te daty na podstawie wartości NLS_DATE_FORMAT parametr.
Istnieje również NLS_TIMESTAMP_FORMAT parametr i NLS_TIMESTAMP_TZ_FORMAT parametr, z których oba mają maskę formatu daty i czasu, którą można określić osobno.
Wszystkie te parametry mają swoje domyślne wartości pochodzące z NLS_TERRITORY parametr (który domyślnie jest zależny od systemu operacyjnego).
Aby zmienić format daty sesji, możesz zaktualizować NLS_TERRITORY parametr lub jawnie zaktualizuj każdy parametr osobno.
Ten artykuł zawiera przykłady sprawdzania i zmieniania tych wartości oraz przeglądania wyników.
Sprawdź ustawienia początkowe
Najpierw sprawdźmy moje obecne ustawienie dla NLS_DATE_FORMAT parametr:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
'NLS_TERRITORY',
'NLS_DATE_FORMAT',
'NLS_TIMESTAMP_FORMAT',
'NLS_TIMESTAMP_TZ_FORMAT'
); Wynik:
WARTOŚĆ PARAMETRU __________________________ _________________________________ 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:RSXFFpre AM TZ>Wartość mojego
NLS_TERRITORYparametr toAUSTRALIA, a więc różne parametry datetime używają domyślnego modelu formatu dla Australii.Ta wartość wpływa na formatowanie daty, gdy używamy niektórych funkcji. Na przykład, oto przykład użycia
SYSDATEaby zwrócić aktualną datę:SELECT SYSDATE FROM DUAL;Wynik:
04/sierpień/21Zmień ustawienie
Możemy użyć
ALTER SESSIONoświadczenie, aby zmienić ustawienia tych parametrów.Mamy możliwość zmiany każdego z tych parametrów z osobna lub zmiany
NLS_TERRITORYparametr, który automatycznie aktualizuje każdy z tych parametrów niejawnie.Zmień
NLS_TERRITORYParametrOto przykład zmiany
NLS_TERRITORYparametr:ALTER SESSION SET NLS_TERRITORY = 'AMERICA';Wynik:
Sesja zmieniona.Sprawdźmy nowe wartości:
SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT' );Wynik:
WARTOŚĆ PARAMETRU __________________________ ________________________________ NLS_TERRITORY AMERYKA 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 TZRWidzimy więc, że nie tylko zaktualizowano terytorium, ale także różne parametry daty i czasu.Zmień tylko
NLS_DATE_FORMATParametrOto przykład aktualizacji
NLS_DATE_FORMATparametr:ALTER SESSION SET NLS_DATE_FORMAT = 'rr-mm-dd';Wynik:
Sesja zmieniona.Sprawdźmy nową wartość:
SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT' );Wynik:
WARTOŚĆ PARAMETRU __________________________ ________________________________ NLS_TERRITORY AMERYKA 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 TZRZgodnie z oczekiwaniami tylko
NLS_DATE_FORMATparametr został zmieniony na nowy format. Pozostałe pozostają niezmienione.Teraz, gdy uruchamiamy
SYSDATE, data jest zwracana w naszym nowym formacie, aleSYSTIMESTAMPzwraca go za pomocąNLS_TIMESTAMP_TZ_FORMATformat, który pozostaje niezmieniony:SELECT SYSDATE, SYSTIMESTAMP FROM DUAL;Wynik:
SYSDATE SYSTIMESTAMP ___________ _________________________________________ 21-08-09 09-SIE-21 07.22.35.402453000 PM -04:00