TO_CHAR Oracle : Convertir des données en chaîne SQL

Découvrez la fonction TO_CHAR Oracle : syntaxe, exemples pratiques et erreurs courantes pour convertir des dates et nombres en chaînes de caractères en SQL.

Illustration du tutoriel SQL Oracle : TO_CHAR Oracle : Convertir des données en chaîne SQL

TO_CHAR Oracle : Convertir des Dates et Nombres en Chaîne SQL

La fonction TO_CHAR Oracle est l’une des fonctions de conversion les plus utilisées en SQL Oracle. Elle permet de transformer une date, un nombre ou un horodatage en chaîne de caractères selon un format défini. Maîtriser TO_CHAR est indispensable pour formater des rapports, afficher des données lisibles et interfacer Oracle avec des applications métier.

Publicité

🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.

📌 À lire aussi : TO_DATE Oracle : convertir une chaîne en date

Définition et utilisation de TO_CHAR en Oracle

La fonction TO_CHAR appartient à la famille des fonctions de conversion Oracle. Son rôle principal est de convertir une valeur de type DATE, NUMBER, TIMESTAMP ou INTERVAL en une chaîne de caractères (VARCHAR2), en appliquant un masque de formatage précis.

Cas d’usage en entreprise

En environnement professionnel, TO_CHAR est omniprésente dans les situations suivantes :

  • Génération de rapports financiers : afficher un montant avec le symbole monétaire et les séparateurs de milliers (1 250 000,00 €).
  • Exports de données : formater une date Oracle au format attendu par un ERP ou un fichier CSV (DD/MM/YYYY).
  • Tri et regroupement : extraire l’année ou le mois d’une date pour réaliser des agrégations temporelles dans des tableaux de bord.
  • Affichage conditionnel : présenter un numéro de compte, un code postal ou un identifiant avec des zéros de remplissage (0042).

Syntaxe de TO_CHAR Oracle

La fonction TO_CHAR accepte deux signatures principales selon le type de donnée à convertir :

Pour les dates et horodatages

TO_CHAR( date_value, 'format_mask' [, 'nls_params'] )

Pour les nombres

TO_CHAR( number_value, 'format_mask' [, 'nls_params'] )

Description des paramètres

  • date_value / number_value : la valeur source à convertir. Il peut s’agir d’une colonne de table, d’une constante ou d’une expression.
  • ‘format_mask’ : le masque de format qui définit la représentation souhaitée en sortie. Ce paramètre est sensible à la casse pour certains formats de date (MM vs mm).
  • ‘nls_params’ (optionnel) : paramètres NLS permettant de définir la langue, le séparateur décimal ou le symbole monétaire. Exemple : 'NLS_DATE_LANGUAGE=FRENCH'.

Principaux masques de format pour les dates

MasqueDescriptionExemple de résultat
DDJour du mois (01-31)07
MMMois en numérique (01-12)06
MONTHNom complet du moisJUIN
MONAbréviation du moisJUN
YYYYAnnée sur 4 chiffres2024
HH24Heure au format 24h14
MIMinutes35
SSSecondes09
DAYNom complet du jourLUNDI
DYAbréviation du jourLUN
QNuméro du trimestre2

Principaux masques de format pour les nombres

MasqueDescriptionExemple de résultat
9Chiffre (supprime les zéros non significatifs)1250
0Chiffre avec zéro de remplissage001250
.Séparateur décimal1250.00
,Séparateur de milliers1,250
LSymbole monétaire local€1250
FMSupprime les espaces et zéros superflus (Fill Mode)1250

Exemples pratiques de TO_CHAR en SQL Oracle

Exemple 1 – Formatage de dates dans un contexte RH

Dans ce premier exemple, une entreprise souhaite générer un rapport listant les employés avec leur date d’embauche formatée en français, ainsi que l’année d’embauche pour des calculs d’ancienneté.

-- Récupération des employés avec leur date d'embauche formatée
SELECT
    emp_id,
    nom,
    prenom,
    -- Affichage de la date au format français : 07/06/2019
    TO_CHAR(date_embauche, 'DD/MM/YYYY') AS date_embauche_fr,
    -- Extraction de l'année uniquement pour calculer l'ancienneté
    TO_CHAR(date_embauche, 'YYYY') AS annee_embauche,
    -- Affichage du mois en toutes lettres en français
    TO_CHAR(date_embauche, 'MONTH', 'NLS_DATE_LANGUAGE=FRENCH') AS mois_embauche
FROM employes
WHERE statut = 'ACTIF'
ORDER BY date_embauche DESC;

Résultat attendu (exemple) :

EMP_ID | NOM      | PRENOM | DATE_EMBAUCHE_FR | ANNEE_EMBAUCHE | MOIS_EMBAUCHE
-------+----------+--------+------------------+----------------+--------------
1042   | MARTIN   | Sophie | 15/03/2022       | 2022           | MARS
1031   | DUPONT   | Luc    | 07/06/2019       | 2019           | JUIN

Exemple 2 – Formatage de montants dans un contexte comptable

Le service comptable souhaite afficher les montants des factures avec séparateurs de milliers, deux décimales et le symbole monétaire, tout en évitant les espaces parasites grâce au modificateur FM.

-- Affichage des factures avec montant formaté pour un rapport comptable
SELECT
    facture_id,
    client_nom,
    -- Format avec séparateur de milliers et 2 décimales
    TO_CHAR(montant_ht, '999G999G990D00', 'NLS_NUMERIC_CHARACTERS='', ''') AS montant_formate,
    -- Numéro de facture sur 8 chiffres avec zéros de remplissage
    TO_CHAR(facture_id, 'FM00000000') AS numero_facture,
    -- Date d'émission avec heure
    TO_CHAR(date_emission, 'DD/MM/YYYY HH24:MI') AS date_heure_emission
FROM factures
WHERE EXTRACT(YEAR FROM date_emission) = 2024
ORDER BY date_emission;

Résultat attendu (exemple) :

FACTURE_ID | CLIENT_NOM | MONTANT_FORMATE | NUMERO_FACTURE | DATE_HEURE_EMISSION
-----------+------------+-----------------+----------------+--------------------
528        | ACME Corp  | 12 500,00       | 00000528       | 14/01/2024 09:30
529        | Globex     | 3 750,75        | 00000529       | 15/01/2024 14:15
Publicité

Erreurs courantes avec TO_CHAR Oracle

Erreur : ORA-01481 – Invalid number format model

Cette erreur survient lorsque le masque de format numérique est incorrect ou incompatible avec la valeur fournie.

Code erroné :

-- Utilisation incorrecte d'un masque de date pour un nombre
SELECT TO_CHAR(125000, 'DD/MM/YYYY') FROM dual;
-- Résultat : ORA-01481: invalid number format model

Solution : Vérifiez toujours que le masque de format correspond au type de la valeur source. Utilisez un masque numérique pour un NUMBER et un masque de date pour une DATE. En cas de doute, testez d’abord sur DUAL :

-- Test rapide du masque avant intégration dans une requête complexe
SELECT TO_CHAR(125000, '999G999G990D00') FROM dual;
-- Résultat : 125 000,00

Autre erreur fréquente : confondre le masque MI (minutes) avec mm dans un contexte de date. Oracle étant sensible à la casse sur certains formats, utilisez toujours les masques en majuscules (MM pour le mois, MI pour les minutes) afin d’éviter les résultats inattendus.

Résumé

Point cléDétail
FonctionTO_CHAR Oracle – Conversion vers VARCHAR2
Types supportésDATE, NUMBER, TIMESTAMP, INTERVAL
Paramètre cléLe masque de format (format_mask)
Paramètre optionnelnls_params pour la langue et les séparateurs
Modificateur FMSupprime les espaces et zéros superflus
Erreur fréquenteORA-01481 : masque incompatible avec le type source
Usage typiqueRapports, exports, agrégations temporelles, affichage métier

Bonnes pratiques Oracle

  1. Toujours spécifier le masque explicitement : ne jamais laisser Oracle appliquer le format NLS par défaut dans les requêtes de production. Un masque implicite peut varier selon la session ou le serveur, entraînant des résultats incohérents selon les environnements.
  2. Utiliser TO_CHAR côté présentation, pas dans les jointures : évitez d’appliquer TO_CHAR sur des colonnes utilisées dans les clauses WHERE ou JOIN, car cela désactive l’utilisation des index et dégrade les performances. Réservez la conversion pour la couche d’affichage (SELECT).

Aller plus loin

Pour approfondir votre maîtrise des fonctions de conversion et de formatage en SQL Oracle, nous vous recommandons ces articles complémentaires :

Questions fréquentes

Comment formater une date en Oracle avec TO_CHAR ?

TO_CHAR(SYSDATE, 'DD/MM/YYYY') renvoie la date au format français. Les modèles courants : DD (jour), MM (mois), YYYY (année), HH24:MI:SS (heure).

Comment afficher le mois en lettres et en français ?

TO_CHAR(SYSDATE, 'DD Month YYYY', 'NLS_DATE_LANGUAGE=FRENCH') renvoie par exemple « 15 Janvier 2026 ».

Comment formater un nombre avec TO_CHAR ?

TO_CHAR(1234.5, '9G999D99') renvoie « 1 234,50 » selon les paramètres NLS ; FM supprime les espaces de remplissage : TO_CHAR(0.5, 'FM990D00') → « 0,50 ».

Sur le même thème

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité