Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction TO_CHAR (datetime) dans Oracle

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 de DATE , TIMESTAMP , TIMESTAMP WITH TIME ZONE , TIMESTAMP WITH LOCAL TIME ZONE type de données
  • interval peut être une valeur de INTERVAL DAY TO SECOND , ou INTERVAL YEAR TO MONTH type de données
  • fmt 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 et TIMESTAMP 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: