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

TO_CHAR(datetime) Funzione in Oracle

In Oracle Database, il TO_CHAR(datetime) la funzione converte un valore datetime o intervallo in un VARCHAR2 valore nel formato specificato dal formato data.

Sintassi

La sintassi è questa:

TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])

Dove:

  • datetime può essere un valore di DATE , TIMESTAMP , TIMESTAMP WITH TIME ZONE , TIMESTAMP WITH LOCAL TIME ZONE tipo di dati
  • interval può essere un valore di INTERVAL DAY TO SECOND o INTERVAL YEAR TO MONTH tipo di dati
  • fmt è un modello di formato opzionale che specifica come formattare il risultato
  • 'nlsparam' è un argomento facoltativo che specifica la lingua in cui vengono restituiti i nomi di mese e giorno e le abbreviazioni.

Esempio

Ecco un esempio da dimostrare:

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

Risultato:

WED, 26 SEPTEMBER 2035

Quindi, 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.

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.

Formato predefinito

Se ometti fmt argomento, il risultato verrà convertito come segue:

  • DATE i valori vengono convertiti in valori nel formato di data predefinito.
  • TIMESTAMP e TIMESTAMP WITH LOCAL TIME ZONE i valori vengono convertiti in valori nel formato timestamp predefinito.
  • TIMESTAMP WITH TIME ZONE i valori vengono convertiti in valori nel timestamp predefinito con il formato del fuso orario.
  • I valori dell'intervallo vengono convertiti nella rappresentazione numerica dell'intervallo letterale.

Ecco un esempio di conversione di un DATE valore senza specificare il formato:

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

Risultato:

26/SEP/35

In questo caso, il formato della data predefinito della mia sessione è DD/MON/RR , e quindi il risultato riflette questo. So che questo è il formato della data predefinito della mia sessione perché ho interrogato il V$NLS_PARAMETERS view, che mi mostra il valore corrente dei parametri NLS.

Vedere Come controllare i valori dei parametri NLS se è necessario verificarli.

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

Intervallo

Ecco un esempio che restituisce un valore di intervallo nel formato predefinito:

SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL;

Risultato:

+25-02

Il 'nlsparam' Argomento

Il 'nlsparam' argomento specifica la lingua in cui vengono restituiti i nomi e le abbreviazioni di mese e giorno. Questo argomento può avere la forma seguente:

'NLS_DATE_LANGUAGE = language'

Esempio:

SELECT 
    TO_CHAR(
        DATE '2035-09-26', 
        'DY, DD MONTH YYYY',
        'NLS_DATE_LANGUAGE = SPANISH'
    )
FROM DUAL;

Risultato:

MIÉ, 26 SEPTIEMBRE 2035

Argomenti nulli

Passaggio null risulta null :

SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;

Risultato:

null

Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null si verifica come risultato di un SQL SELECT dichiarazione.

Tuttavia, puoi utilizzare SET NULL per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null deve essere restituito.

Argomento mancante

Chiamando la funzione senza passare alcun argomento, viene visualizzato un errore:

SELECT TO_CHAR()
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT TO_CHAR()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Il passaggio di troppi argomenti genera anche un errore:

SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL
Error at Command Line : 1 Column : 72
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action: