Dans Oracle Database, le TO_CHAR(datetime)
la fonction convertit une valeur de date/heure ou d'intervalle en un VARCHAR2
valeur dans le format spécifié par le format de date.
Syntaxe
La syntaxe ressemble à ceci :
TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])
Où :
datetime
peut être une valeur deDATE
,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
type de donnéesinterval
peut être une valeur deINTERVAL
DAY
TO
SECOND
, ouINTERVAL
YEAR
TO
MONTH
type de donnéesfmt
est un modèle de format facultatif qui spécifie comment le résultat doit être formaté'nlsparam'
est un argument facultatif qui spécifie la langue dans laquelle les noms et abréviations des mois et des jours sont renvoyés.
Exemple
Voici un exemple pour illustrer :
SELECT TO_CHAR(DATE '2035-09-26', 'DY, DD MONTH YYYY')
FROM DUAL;
Résultat :
WED, 26 SEPTEMBER 2035
Ainsi, il a renvoyé la date fournie dans le premier argument, dans le format spécifié par le deuxième argument.
Le deuxième argument fournit le modèle de format. Le modèle de format peut consister en un ou plusieurs éléments de format. Par exemple, DY
est un élément de format, tout comme DD
, MONTH
, etc.
Voir cette liste complète des éléments de format Datetime dans Oracle pour une liste des éléments de format qui peuvent être utilisés pour formater les valeurs datetime avec cette fonction.
Format par défaut
Si vous omettez le fmt
argument, le résultat sera converti comme suit :
DATE
les valeurs sont converties en valeurs dans le format de date par défaut.TIMESTAMP
etTIMESTAMP
WITH
LOCAL
TIME
ZONE
les valeurs sont converties en valeurs au format d'horodatage par défaut.TIMESTAMP
WITH
TIME
ZONE
les valeurs sont converties en valeurs dans l'horodatage par défaut avec le format de fuseau horaire.- Les valeurs d'intervalle sont converties en représentation numérique du littéral d'intervalle.
Voici un exemple de conversion d'une DATE
valeur sans préciser le format :
SELECT TO_CHAR(DATE '2035-09-26')
FROM DUAL;
Résultat :
26/SEP/35
Dans ce cas, le format de date par défaut de ma session est DD/MON/RR
, et donc le résultat reflète cela. Je sais qu'il s'agit du format de date par défaut de ma session car j'ai interrogé le V$NLS_PARAMETERS
view, qui me montre la valeur actuelle des paramètres NLS.
Voir Comment vérifier les valeurs des paramètres NLS si vous avez besoin de les vérifier.
Consultez également Comment modifier le format de date de votre session si vous souhaitez modifier le format de date et d'heure par défaut pour votre session en cours.
Intervalle
Voici un exemple qui génère une valeur d'intervalle dans le format par défaut :
SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL;
Résultat :
+25-02
Le 'nlsparam'
Argumentation
Le 'nlsparam'
L'argument spécifie la langue dans laquelle les noms et abréviations des mois et des jours sont renvoyés. Cet argument peut avoir la forme suivante :
'NLS_DATE_LANGUAGE = language'
Exemple :
SELECT
TO_CHAR(
DATE '2035-09-26',
'DY, DD MONTH YYYY',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
Résultat :
MIÉ, 26 SEPTIEMBRE 2035
Arguments nuls
Passer null
donne null
:
SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
Résultat :
null
Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois que null
se produit à la suite d'un SQL SELECT
déclaration.
Cependant, vous pouvez utiliser SET NULL
pour spécifier une autre chaîne à renvoyer. Ici, j'ai précisé que la chaîne null
doit être retourné.
Argument manquant
L'appel de la fonction sans passer d'arguments génère une erreur :
SELECT TO_CHAR()
FROM DUAL;
Résultat :
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:
Passer trop d'arguments entraîne également une erreur :
SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL;
Résultat :
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: