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

Come formattare le date in Oracle

Questo articolo contiene esempi comuni di formattazione delle date in Oracle Database.

Il formato della data predefinito per la tua sessione è determinato da vari parametri di inizializzazione NLS (ecco come verificarli). Puoi sfruttare questi parametri per generare una formattazione compatibile con le impostazioni locali.

Puoi anche utilizzare funzioni come TO_CHAR(number) per convertire le date in una stringa e formattarle esattamente come preferisci al volo.

Formato data predefinito

Quando restituisci una data in Oracle, per impostazione predefinita, viene restituita nel formato della data predefinito per la sessione corrente.

Esempio:

SELECT DATE '2030-12-10' FROM DUAL;

Risultato:

10/DEC/30

In questo caso, il formato della data predefinito della mia sessione è DD/MON/RR , e quindi il risultato riflette questo.

Puoi cambiare il formato cambiando il NLS_TERRITORY parametro (che modifica implicitamente altri parametri come i parametri datetime) o modificando il NLS_DATE_FORMAT parametro direttamente.

Ecco cosa succede quando cambio NLS_TERRITORY parametro in un territorio diverso:

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT DATE '2030-12-10' FROM DUAL;

Risultato:

10.12.30

Il formato della data predefinito è stato aggiornato per riflettere il formato per quella locale.

Ci sono anche altri parametri NLS datetime, come NLS_TIME_FORMAT , NLS_TIME_TZ_FORMAT , NLS_TIMESTAMP_FORMAT e NLS_TIMESTAMP_TZ_FORMAT di cui devi essere a conoscenza quando modifichi i formati di data e ora.

Vedi anche Come modificare il formato della data della sessione se desideri modificare il formato data e ora predefinito per la sessione corrente.

Il TO_CHAR() Funzione

Tegli TO_CHAR(datetime) La funzione accetta un valore datetime e restituisce una stringa formattata nel modo specificato dall'utente.

Ecco un rapido esempio:

SELECT TO_CHAR(DATE '2035-09-26', 'Dy, DD Month YYYY')
FROM DUAL;

Risultato:

Wed, 26 September 2035

Qui, la funzione ha restituito la data fornita nel primo argomento, nel formato specificato dal secondo argomento.

Il secondo argomento fornisce il modello di formato. Il modello di formato può essere costituito da uno o più elementi di formato. Ad esempio, Dy è un elemento di formato, così come DD , Month , ecc.

Se non specifichi un formato, viene restituito utilizzando il formato predefinito per la sessione.

Consulta questo elenco completo di elementi di formato DateTime in Oracle per un elenco di elementi di formato che possono essere utilizzati per formattare i valori DateTime con questa funzione.

Di seguito sono riportati esempi più specifici.

Restituisci il nome del giorno

È possibile restituire singole parti della data, se necessario. Ad esempio, puoi restituire solo il nome del giorno, solo il nome del mese, ecc. Tutto ciò che devi fare è utilizzare l'elemento di formato applicabile come unico elemento di formato nel tuo modello di formato.

Ecco un esempio di restituzione del nome del giorno:

SELECT TO_CHAR(DATE '2035-09-26', 'Day')
FROM DUAL;

Risultato:

Wednesday

In questo caso ho restituito il nome completo del giorno.

Possiamo usare Dy come nell'esempio precedente per restituire il nome del giorno breve:

SELECT TO_CHAR(DATE '2035-09-26', 'Dy')
FROM DUAL;

Risultato:

Wed

Restituisci il nome del mese

Ecco un esempio di restituzione del nome del mese:

SELECT TO_CHAR(DATE '2035-09-26', 'Month')
FROM DUAL;

Risultato:

September

E il nome breve del mese:

SELECT TO_CHAR(DATE '2035-09-26', 'Mon')
FROM DUAL;

Risultato:

September

Maiuscole/minuscole

Negli esempi precedenti, abbiamo messo in maiuscolo la prima lettera per i nomi di giorno e mese.

In alternativa, possiamo utilizzare tutte le lettere maiuscole per restituire i nomi di giorno e mese in maiuscolo e tutte le lettere minuscole per restituirli in minuscolo.

SELECT 
    TO_CHAR(DATE '2035-09-26', 'DY, Dy, dy')
FROM DUAL
UNION ALL
SELECT 
    TO_CHAR(DATE '2035-09-26', 'DAY, Day, day')
FROM DUAL
UNION ALL
SELECT 
    TO_CHAR(DATE '2035-09-26', 'MON, Mon, mon')
FROM DUAL
UNION ALL
SELECT 
    TO_CHAR(DATE '2035-09-26', 'MONTH, Month, month')
FROM DUAL;

Risultato:

WED, Wed, wed                           
WEDNESDAY, Wednesday, wednesday         
SEP, Sep, sep                           
SEPTEMBER, September, september         

Lingua

Il NLS_DATE_LANGUAGE Il parametro viene utilizzato per determinare la lingua delle parti della data che vengono esplicitate (come i nomi dei giorni e dei mesi). Il valore predefinito di questo parametro è derivato da NLS_LANGUAGE parametro.

Ecco un esempio di aggiornamento di NLS_DATE_LANGUAGE parametro, quindi restituendo una data formattata che include il nome del giorno e del mese:

ALTER SESSION SET NLS_DATE_LANGUAGE = 'Spanish';
SELECT TO_CHAR(DATE '2035-09-26', 'Dy, DD Month YYYY')
FROM DUAL;

Risultato:

Mié, 26 Septiembre 2035

La lingua può anche essere specificata in modo esplicito da TO_CHAR() funzione stessa. In questo modo è possibile ignorare temporaneamente le impostazioni della lingua predefinite per la sessione corrente, senza influire su tali impostazioni.

Esempio:

ALTER SESSION SET NLS_DATE_LANGUAGE = 'English';
SELECT TO_CHAR(
    DATE '2035-09-26', 
    'Dy, DD Month YYYY',
    'NLS_DATE_LANGUAGE = Spanish'
    )
FROM DUAL;

Risultato:

Mié, 26 Septiembre 2035

In questo esempio, ho impostato la mia sessione corrente per utilizzare l'inglese, quindi ho eseguito una query per generare una data utilizzando lo spagnolo.

Come accennato in precedenza, l'output della data in spagnolo non ha influito sull'impostazione inglese. Per dimostrarlo, ho eseguito la seguente query immediatamente dopo quella (senza modificare NLS_DATE_LANGUAGE parametro).

SELECT TO_CHAR(
    DATE '2035-09-26', 
    'Dy, DD Month YYYY'
    )
FROM DUAL;

Risultato:

Wed, 26 September 2035

Come previsto, il risultato è in inglese, che è la lingua predefinita per la sessione corrente.