Når du arbejder med funktioner, der returnerer datoer, returnerer Oracle Database disse datoer baseret på værdien af NLS_DATE_FORMAT
parameter.
Der er også en NLS_TIMESTAMP_FORMAT
parameter og en NLS_TIMESTAMP_TZ_FORMAT
parameter, som begge har en datetime-formatmaske, der kan specificeres separat.
Alle disse parametre har deres standardværdier afledt af NLS_TERRITORY
parameter (som som standard er operativsystemafhængig).
Så for at ændre datoformatet for din session kan du enten opdatere NLS_TERRITORY
parameter, eller eksplicit opdatere hver parameter individuelt.
Denne artikel giver eksempler på kontrol og ændring af disse værdier og visning af resultaterne.
Tjek den oprindelige indstilling
Lad os først tjekke min nuværende indstilling for 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ÆRDI __________________________ ________________________________ 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 TZ:SSXFF AMVærdien af min
NLS_TERRITORY
parameteren erAUSTRALIA
, og så bruger de forskellige datetime-parametre standardformatmodellen for Australien.Denne værdi påvirker, hvordan datoen formateres, når vi bruger visse funktioner. For eksempel, her er et eksempel på brug af
SYSDATE
for at returnere den aktuelle dato:SELECT SYSDATE FROM DUAL;
Resultat:
04/AUG/21Skift indstillingen
Vi kan bruge
ALTER SESSION
sætning for at ændre indstillingen for disse parametre.Vi har mulighed for at ændre hver af disse parametre individuelt eller ændre
NLS_TERRITORY
parameter, som automatisk opdaterer hver af disse parametre implicit.Skift
NLS_TERRITORY
ParameterHer er et eksempel på ændring af
NLS_TERRITORY
parameter:ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
Resultat:
Session ændret.Lad os tjekke de nye værdier:
SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT' );
Resultat:
PARAMETERVÆRDI __________________________ _______________________________ 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, at ikke kun territoriet er blevet opdateret, de forskellige datetime-parametre er også blevet opdateret.
Skift bare
NLS_DATE_FORMAT
ParameterHer er et eksempel på opdatering af
NLS_DATE_FORMAT
parameter:ALTER SESSION SET NLS_DATE_FORMAT = 'rr-mm-dd';
Resultat:
Session ændret.Lad os tjekke den nye værdi:
SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT' );
Resultat:
PARAMETERVÆRDI __________________________ _______________________________ 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 forventet kun
NLS_DATE_FORMAT
parameter er blevet ændret til det nye format. De øvrige forbliver uændrede.Nu når vi kører
SYSDATE
, datoen returneres i vores nye format, menSYSTIMESTAMP
returnerer den ved hjælp afNLS_TIMESTAMP_TZ_FORMAT
format, som er uændret:SELECT SYSDATE, SYSTIMESTAMP FROM DUAL;
Resultat:
SYSDATE SYSTIMESTAMP ___________ __________________________________________ 21-08-09 09-AUG-21 07.22.35.402453000 PM -04:00