Oracle
 sql >> Database >  >> RDS >> Oracle

Come modificare il formato della data nella tua sessione Oracle

Quando si lavora con funzioni che restituiscono date, Oracle Database restituisce queste date in base al valore di NLS_DATE_FORMAT parametro.

C'è anche un NLS_TIMESTAMP_FORMAT parametro e un NLS_TIMESTAMP_TZ_FORMAT parametro, entrambi dotati di una maschera di formato data/ora che può essere specificata separatamente.

Tutti questi parametri hanno i loro valori predefiniti derivati ​​da NLS_TERRITORY parametro (che per impostazione predefinita dipende dal sistema operativo).

Quindi, per cambiare il formato della data per la tua sessione, puoi aggiornare il NLS_TERRITORY parametro o aggiornare in modo esplicito ogni parametro singolarmente.

Questo articolo fornisce esempi di verifica e modifica di questi valori e visualizzazione dei risultati.

Verifica l'impostazione iniziale

Per prima cosa, controlliamo la mia impostazione attuale per il NLS_DATE_FORMAT parametro:

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

Risultato:

                 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    

Il valore del mio NLS_TERRITORY il parametro è AUSTRALIA , e quindi i vari parametri datetime utilizzano il modello di formato predefinito per l'Australia.

Questo valore influisce sulla formattazione della data quando utilizziamo determinate funzioni. Ad esempio, ecco un esempio di utilizzo di SYSDATE per restituire la data corrente:

SELECT SYSDATE
FROM DUAL;

Risultato:

04/AUG/21

Modifica l'impostazione

Possiamo usare il ALTER SESSION per modificare l'impostazione di questi parametri.

Abbiamo la possibilità di modificare ciascuno di questi parametri individualmente, o cambiare il NLS_TERRITORY parametro, che aggiorna automaticamente ciascuno di questi parametri in modo implicito.

Cambia il NLS_TERRITORY Parametro

Ecco un esempio di modifica di NLS_TERRITORY parametro:

ALTER SESSION SET NLS_TERRITORY = 'AMERICA';

Risultato:

Session altered.

Controlliamo i nuovi valori:

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

Risultato:

                 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    

Quindi possiamo vedere che, non solo è stato aggiornato il territorio, sono stati aggiornati anche i vari parametri datetime.

Cambia solo il NLS_DATE_FORMAT Parametro

Ecco un esempio di aggiornamento di NLS_DATE_FORMAT parametro:

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

Risultato:

Session altered.

Controlliamo il nuovo valore:

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

Risultato:

                 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    

Come previsto, solo NLS_DATE_FORMAT parametro è stato modificato nel nuovo formato. Gli altri rimangono invariati.

Ora quando eseguiamo SYSDATE , la data viene restituita nel nostro nuovo formato, ma SYSTIMESTAMP lo restituisce utilizzando il NLS_TIMESTAMP_TZ_FORMAT formato, che è invariato:

SELECT 
    SYSDATE,
    SYSTIMESTAMP
FROM DUAL;

Risultato:

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