När du arbetar med funktioner som returnerar datum returnerar Oracle Database dessa datum baserat på värdet för NLS_DATE_FORMAT
parameter.
Det finns också en NLS_TIMESTAMP_FORMAT
parameter och en NLS_TIMESTAMP_TZ_FORMAT
parameter, som båda har en datetime-formatmask som kan specificeras separat.
Alla dessa parametrar har sina standardvärden härledda från NLS_TERRITORY
parameter (som som standard är operativsystemberoende).
Så för att ändra datumformatet för din session kan du antingen uppdatera NLS_TERRITORY
parameter, eller explicit uppdatera varje parameter individuellt.
Den här artikeln ger exempel på hur du kontrollerar och ändrar dessa värden och visar resultaten.
Kontrollera den ursprungliga inställningen
Låt oss först kontrollera min nuvarande inställning för 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'
);
Resultat:
PARAMETERVÄRDE __________________________ ________________________________ 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 TZRVärdet på min
NLS_TERRITORY
parametern ärAUSTRALIA
, och därför använder de olika datetime-parametrarna standardformatmodellen för Australien.Detta värde påverkar hur datumet formateras när vi använder vissa funktioner. Till exempel, här är ett exempel på hur du använder
SYSDATE
för att returnera det aktuella datumet:SELECT SYSDATE FROM DUAL;
Resultat:
04/AUG/21Ändra inställningen
Vi kan använda
ALTER SESSION
för att ändra inställningen för dessa parametrar.Vi har möjlighet att ändra var och en av dessa parametrar individuellt, eller ändra
NLS_TERRITORY
parameter, som automatiskt uppdaterar var och en av dessa parametrar implicit.Ändra
NLS_TERRITORY
ParameterHär är ett exempel på hur du ändrar
NLS_TERRITORY
parameter:ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
Resultat:
Sessionen har ändrats.Låt oss kontrollera de nya värdena:
SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT' );
Resultat:
PARAMETERVÄRDE __________________________ _______________________________ 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 TZRSå vi kan se att inte bara området har uppdaterats, de olika datetime-parametrarna har också uppdaterats.
Ändra bara
NLS_DATE_FORMAT
ParameterHär är ett exempel på hur du uppdaterar
NLS_DATE_FORMAT
parameter:ALTER SESSION SET NLS_DATE_FORMAT = 'rr-mm-dd';
Resultat:
Sessionen har ändrats.Låt oss kontrollera det nya värdet:
SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT' );
Resultat:
PARAMETERVÄRDE __________________________ _______________________________ 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 TZRSom förväntat, endast
NLS_DATE_FORMAT
parametern har ändrats till det nya formatet. De övriga förblir oförändrade.Nu när vi kör
SYSDATE
, datumet returneras i vårt nya format, menSYSTIMESTAMP
returnerar den medNLS_TIMESTAMP_TZ_FORMAT
format, som är oförändrat:SELECT SYSDATE, SYSTIMESTAMP FROM DUAL;
Resultat:
SYSDATE SYSTIMESTAMP ___________ _______________________________________ 21-08-09 09-AUG-21 07.22.35.402453000 PM -04:00