Bij het werken met functies die datums retourneren, retourneert Oracle Database deze datums op basis van de waarde van de NLS_DATE_FORMAT
parameter.
Er is ook een NLS_TIMESTAMP_FORMAT
parameter en een NLS_TIMESTAMP_TZ_FORMAT
parameter, die beide een datum/tijd-formaatmasker hebben dat afzonderlijk kan worden opgegeven.
Al deze parameters hebben hun standaardwaarden afgeleid van de NLS_TERRITORY
parameter (die standaard afhankelijk is van het besturingssysteem).
Dus om de datumnotatie voor uw sessie te wijzigen, kunt u de NLS_TERRITORY
bijwerken parameter, of werk elke parameter afzonderlijk bij.
Dit artikel geeft voorbeelden van het controleren en wijzigen van deze waarden en het bekijken van de resultaten.
Controleer de begininstelling
Laten we eerst eens kijken naar mijn huidige instelling voor de 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'
);
Resultaat:
PARAMETERWAARDE __________________________ _________________________________ NLS_TERRITORY AUSTRALI 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:SSXpre AM TZRDe waarde van mijn
NLS_TERRITORY
parameter isAUSTRALIA
, en dus gebruiken de verschillende datetime-parameters het standaardformaatmodel voor Australië.Deze waarde beïnvloedt hoe de datum wordt opgemaakt wanneer we bepaalde functies gebruiken. Hier is bijvoorbeeld een voorbeeld van het gebruik van
SYSDATE
om de huidige datum terug te geven:SELECT SYSDATE FROM DUAL;
Resultaat:
04/AUG/21De instelling wijzigen
We kunnen de
ALTER SESSION
. gebruiken statement om de instelling voor deze parameters te wijzigen.We hebben de mogelijkheid om elk van deze parameters afzonderlijk te wijzigen, of de
NLS_TERRITORY
parameter, die elk van die parameters automatisch impliciet bijwerkt.Wijzig de
NLS_TERRITORY
ParameterHier is een voorbeeld van het wijzigen van de
NLS_TERRITORY
parameter:ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
Resultaat:
Sessie gewijzigd.Laten we eens kijken naar de nieuwe waarden:
SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT' );
Resultaat:
PARAMETERWAARDE __________________________ _______________________________ NLS_TERRITORY AMERIKA 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 TZRWe kunnen dus zien dat niet alleen het territorium is bijgewerkt, maar ook de verschillende datetime-parameters zijn bijgewerkt.
Wijzig alleen de
NLS_DATE_FORMAT
ParameterHier is een voorbeeld van het bijwerken van de
NLS_DATE_FORMAT
parameter:ALTER SESSION SET NLS_DATE_FORMAT = 'rr-mm-dd';
Resultaat:
Sessie gewijzigd.Laten we eens kijken naar de nieuwe waarde:
SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT' );
Resultaat:
PARAMETERWAARDE __________________________ _______________________________ NLS_TERRITORY AMERIKA 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 TZRZoals verwacht, alleen de
NLS_DATE_FORMAT
parameter is gewijzigd in het nieuwe formaat. De andere blijven ongewijzigd.Wanneer we nu
SYSDATE
run uitvoeren , de datum wordt geretourneerd in ons nieuwe formaat, maarSYSTIMESTAMP
geeft het terug met deNLS_TIMESTAMP_TZ_FORMAT
formaat, dat ongewijzigd is:SELECT SYSDATE, SYSTIMESTAMP FROM DUAL;
Resultaat:
SYSDATE SYSTIMESTAMP ___________ _________________________________________ 21-08-09 09-AUG-21 07.22.35.402453000 PM -04:00