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 diDATE
,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
tipo di datiinterval
può essere un valore diINTERVAL
DAY
TO
SECOND
oINTERVAL
YEAR
TO
MONTH
tipo di datifmt
è 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
eTIMESTAMP
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: