sql >> Databasteknik >  >> RDS >> Oracle

Så här ändrar du datumformatet i din Oracle-session

När du arbetar med funktioner som returnerar datum returnerar Oracle Database dessa datum baserat på värdet för NLS_DATE_FORMAT parameter.

Det finns också en NLS_TIMESTAMP_FORMAT parameter och en NLS_TIMESTAMP_TZ_FORMAT parameter, som båda har en datetime-formatmask som kan specificeras separat.

Alla dessa parametrar har sina standardvärden härledda från NLS_TERRITORY parameter (som som standard är operativsystemberoende).

Så för att ändra datumformatet för din session kan du antingen uppdatera NLS_TERRITORY parameter, eller explicit uppdatera varje parameter individuellt.

Den här artikeln ger exempel på hur du kontrollerar och ändrar dessa värden och visar resultaten.

Kontrollera den ursprungliga inställningen

Låt oss först kontrollera min nuvarande inställning för 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ÄRDE __________________________ ________________________________ 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 

Värdet på min NLS_TERRITORY parametern är AUSTRALIA , och därför använder de olika datetime-parametrarna standardformatmodellen för Australien.

Detta värde påverkar hur datumet formateras när vi använder vissa funktioner. Till exempel, här är ett exempel på hur du använder SYSDATE för att returnera det aktuella datumet:

SELECT SYSDATE
FROM DUAL; 

Resultat:

04/AUG/21

Ändra inställningen

Vi kan använda ALTER SESSION för att ändra inställningen för dessa parametrar.

Vi har möjlighet att ändra var och en av dessa parametrar individuellt, eller ändra NLS_TERRITORY parameter, som automatiskt uppdaterar var och en av dessa parametrar implicit.

Ändra NLS_TERRITORY Parameter

Här är ett exempel på hur du ändrar NLS_TERRITORY parameter:

ALTER SESSION SET NLS_TERRITORY = 'AMERICA'; 

Resultat:

Sessionen har ändrats.

Låt oss kontrollera de nya värdena:

SELECT
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_DATE_FORMAT',
    'NLS_TIMESTAMP_FORMAT',
    'NLS_TIMESTAMP_TZ_FORMAT'
    ); 

Resultat:

 PARAMETERVÄRDE __________________________ _______________________________ 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 

Så vi kan se att inte bara området har uppdaterats, de olika datetime-parametrarna har också uppdaterats.

Ändra bara NLS_DATE_FORMAT Parameter

Här är ett exempel på hur du uppdaterar NLS_DATE_FORMAT parameter:

ALTER SESSION SET NLS_DATE_FORMAT = 'rr-mm-dd'; 

Resultat:

Sessionen har ändrats.

Låt oss kontrollera det nya värdet:

SELECT
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_DATE_FORMAT',
    'NLS_TIMESTAMP_FORMAT',
    'NLS_TIMESTAMP_TZ_FORMAT'
    ); 

Resultat:

 PARAMETERVÄRDE __________________________ _______________________________ 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 

Som förväntat, endast NLS_DATE_FORMAT parametern har ändrats till det nya formatet. De övriga förblir oförändrade.

Nu när vi kör SYSDATE , datumet returneras i vårt nya format, men SYSTIMESTAMP returnerar den med NLS_TIMESTAMP_TZ_FORMAT format, som är oförändrat:

SELECT 
    SYSDATE,
    SYSTIMESTAMP
FROM DUAL; 

Resultat:

 SYSDATE SYSTIMESTAMP ___________ _______________________________________ 21-08-09 09-AUG-21 07.22.35.402453000 PM -04:00 

  1. Hur man övervakar PostgreSQL som körs inuti en Docker-behållare:Del ett

  2. Jämför Oracle MySQL, Percona Server och MariaDB

  3. Vilka är några sätt att komma åt Microsoft SQL Server från Linux?

  4. biginteger array-funktioner