Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So ändern Sie das Datumsformat in Ihrer Oracle-Sitzung

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