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