Beim Arbeiten mit Funktionen, die Daten zurückgeben, gibt Oracle Database diese Daten basierend auf dem Wert von NLS_DATE_FORMAT
zurück Parameter.
Es gibt auch ein NLS_TIMESTAMP_FORMAT
Parameter und ein NLS_TIMESTAMP_TZ_FORMAT
Parameter, die beide eine Datetime-Formatmaske haben, die separat angegeben werden kann.
Alle diese Parameter haben ihre Standardwerte, die von NLS_TERRITORY
abgeleitet sind -Parameter (der standardmäßig vom Betriebssystem abhängig ist).
Um also das Datumsformat für Ihre Sitzung zu ändern, können Sie entweder NLS_TERRITORY
aktualisieren Parameter oder aktualisieren Sie explizit jeden Parameter einzeln.
Dieser Artikel enthält Beispiele zum Überprüfen und Ändern dieser Werte sowie zum Anzeigen der Ergebnisse.
Überprüfen Sie die Anfangseinstellung
Lassen Sie uns zuerst meine aktuelle Einstellung für das NLS_DATE_FORMAT
überprüfen Parameter:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
'NLS_TERRITORY',
'NLS_DATE_FORMAT',
'NLS_TIMESTAMP_FORMAT',
'NLS_TIMESTAMP_TZ_FORMAT'
);
Ergebnis:
PARAMETER VALUE __________________________ _________________________________ 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 TZR
Der Wert meines NLS_TERRITORY
Parameter ist AUSTRALIA
, und so verwenden die verschiedenen datetime-Parameter das Standardformatmodell für Australien.
Dieser Wert beeinflusst, wie das Datum formatiert wird, wenn wir bestimmte Funktionen verwenden. Hier ist beispielsweise ein Beispiel für die Verwendung von SYSDATE
um das aktuelle Datum zurückzugeben:
SELECT SYSDATE
FROM DUAL;
Ergebnis:
04/AUG/21
Einstellung ändern
Wir können die ALTER SESSION
verwenden -Anweisung, um die Einstellung für diese Parameter zu ändern.
Wir haben die Möglichkeit, jeden dieser Parameter einzeln zu ändern oder den NLS_TERRITORY
zu ändern -Parameter, der jeden dieser Parameter implizit automatisch aktualisiert.
Ändern Sie das NLS_TERRITORY
Parameter
Hier ist ein Beispiel für die Änderung von NLS_TERRITORY
Parameter:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
Ergebnis:
Session altered.
Lassen Sie uns die neuen Werte überprüfen:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
'NLS_TERRITORY',
'NLS_DATE_FORMAT',
'NLS_TIMESTAMP_FORMAT',
'NLS_TIMESTAMP_TZ_FORMAT'
);
Ergebnis:
PARAMETER VALUE __________________________ _______________________________ 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 TZR
Wir können also sehen, dass nicht nur das Gebiet aktualisiert wurde, sondern auch die verschiedenen datetime-Parameter aktualisiert wurden.
Ändern Sie nur das NLS_DATE_FORMAT
Parameter
Hier ist ein Beispiel für die Aktualisierung von NLS_DATE_FORMAT
Parameter:
ALTER SESSION SET NLS_DATE_FORMAT = 'rr-mm-dd';
Ergebnis:
Session altered.
Lassen Sie uns den neuen Wert überprüfen:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
'NLS_TERRITORY',
'NLS_DATE_FORMAT',
'NLS_TIMESTAMP_FORMAT',
'NLS_TIMESTAMP_TZ_FORMAT'
);
Ergebnis:
PARAMETER VALUE __________________________ _______________________________ 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 TZR
Wie erwartet, nur das NLS_DATE_FORMAT
Parameter wurde auf das neue Format geändert. Die anderen bleiben unverändert.
Wenn wir jetzt SYSDATE
ausführen , wird das Datum in unserem neuen Format zurückgegeben, aber SYSTIMESTAMP
gibt es mit dem NLS_TIMESTAMP_TZ_FORMAT
zurück unverändertes Format:
SELECT
SYSDATE,
SYSTIMESTAMP
FROM DUAL;
Ergebnis:
SYSDATE SYSTIMESTAMP ___________ _________________________________________ 21-08-09 09-AUG-21 07.22.35.402453000 PM -04:00