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_TERRITORY
parametr 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
SYSDATE
aby zwrócić aktualną datę:SELECT SYSDATE FROM DUAL;
Wynik:
04/sierpień/21Zmień ustawienie
Możemy użyć
ALTER SESSION
oświadczenie, aby zmienić ustawienia tych parametrów.Mamy możliwość zmiany każdego z tych parametrów z osobna lub zmiany
NLS_TERRITORY
parametr, który automatycznie aktualizuje każdy z tych parametrów niejawnie.Zmień
NLS_TERRITORY
ParametrOto przykład zmiany
NLS_TERRITORY
parametr: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_FORMAT
ParametrOto przykład aktualizacji
NLS_DATE_FORMAT
parametr: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_FORMAT
parametr został zmieniony na nowy format. Pozostałe pozostają niezmienione.Teraz, gdy uruchamiamy
SYSDATE
, data jest zwracana w naszym nowym formacie, aleSYSTIMESTAMP
zwraca go za pomocąNLS_TIMESTAMP_TZ_FORMAT
format, 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