
null
—
La fonction CAST en SQL Oracle : conversion de types de données
La fonction CAST en SQL Oracle est l’un des outils les plus utilisés pour convertir explicitement une valeur d’un type de données vers un autre. Que vous travailliez sur des rapports financiers, des migrations de données ou des interfaces applicatives, maîtriser CAST en SQL Oracle vous permet de garantir la cohérence et la fiabilité de vos requêtes. Ce cours vous guide pas à pas, de la syntaxe aux exemples concrets.
Définition et utilisation de CAST en SQL Oracle
La fonction CAST est une fonction de conversion standard définie par la norme SQL ANSI et pleinement supportée par Oracle. Elle permet de transformer explicitement une expression d’un type source vers un type cible compatible.
Contrairement aux conversions implicites qu’Oracle peut effectuer automatiquement (et qui peuvent parfois produire des résultats inattendus), CAST rend la conversion visible, explicite et contrôlée. C’est une bonne pratique fondamentale dans tout code SQL professionnel.
Cas d’usage en entreprise
- Rapports et tableaux de bord : convertir un nombre décimal en entier pour l’affichage d’un indicateur clé (KPI).
- Migration de données : harmoniser des colonnes de types différents issues de systèmes hétérogènes (ERP, CRM, etc.).
- Interfaces applicatives : formater des données avant leur envoi vers une API ou un fichier d’export (CSV, XML).
- Calculs conditionnels : convertir une chaîne de caractères en date ou en nombre pour effectuer des comparaisons ou des tris fiables.
- Jointures entre tables : aligner les types de données de colonnes issues de tables différentes afin d’éviter les erreurs lors d’une jointure.
Syntaxe de la fonction CAST
La syntaxe de la fonction CAST en Oracle est simple et conforme au standard SQL :
CAST(expression AS type_cible)Détail des paramètres
- expression : la valeur ou la colonne à convertir. Il peut s’agir d’une colonne de table, d’une constante littérale, du résultat d’une sous-requête scalaire ou d’une expression calculée.
- AS : mot-clé obligatoire qui sépare l’expression du type cible.
- type_cible : le type de données Oracle vers lequel vous souhaitez convertir l’expression. Les types les plus couramment utilisés avec
CASTsont :
| Type cible | Description |
|---|---|
VARCHAR2(n) | Chaîne de caractères de longueur variable (n caractères max) |
NUMBER(p, s) | Nombre avec précision (p) et échelle (s) |
DATE | Date et heure au format Oracle |
TIMESTAMP | Date et heure avec fractions de secondes |
INTEGER | Nombre entier (alias de NUMBER(38)) |
FLOAT | Nombre à virgule flottante |
CHAR(n) | Chaîne de caractères de longueur fixe |
Remarque Oracle : Certains types comme CLOB ou BLOB ne sont pas supportés comme type cible direct dans CAST. Pour ces conversions, Oracle recommande d’utiliser des fonctions dédiées telles que TO_CLOB().
Exemples pratiques de CAST en SQL Oracle
Exemple 1 – Convertir un nombre décimal en entier pour un rapport de ventes
Contexte métier : vous gérez une base de données commerciale et souhaitez afficher le chiffre d’affaires mensuel arrondi à l’entier le plus proche dans un rapport de direction, sans décimales superflues.
-- Sélection du nom du commercial et de son chiffre d'affaires mensuel
-- Le montant décimal est converti en entier grâce à CAST
SELECT
nom_commercial,
mois_vente,
CAST(chiffre_affaires AS INTEGER) AS ca_entier
FROM
ventes_mensuelles
WHERE
annee_vente = 2024
ORDER BY
ca_entier DESC;
Explication : La colonne chiffre_affaires est de type NUMBER(12,2). En appliquant CAST(... AS INTEGER), Oracle tronque la partie décimale (sans arrondi) et retourne un entier. Le rapport est ainsi plus lisible pour les décideurs. Notez qu’il ne s’agit pas d’un arrondi mais d’une troncature : 1999.99 devient 1999.
Exemple 2 – Convertir une date en chaîne de caractères pour un export CSV
Contexte métier : votre application doit exporter des données de commandes vers un fichier CSV. La colonne date_commande est de type DATE, mais le fichier d’export attend une chaîne de caractères au format YYYY-MM-DD.
-- Conversion de la date de commande en chaîne de caractères
-- pour compatibilité avec le format d'export attendu par l'application tierce
SELECT
numero_commande,
id_client,
CAST(date_commande AS VARCHAR2(10)) AS date_commande_texte,
montant_total
FROM
commandes
WHERE
statut = 'EXPEDIEE'
ORDER BY
date_commande DESC;
Explication : Oracle convertit la valeur DATE en VARCHAR2(10) en utilisant le format de session NLS en cours (généralement DD/MM/YY ou DD-MON-RR selon la configuration). Si vous avez besoin d’un format précis et indépendant de la configuration NLS, il est préférable de combiner CAST avec TO_CHAR : TO_CHAR(date_commande, 'YYYY-MM-DD'). Cette combinaison est la pratique recommandée en environnement de production Oracle.
Erreurs courantes avec CAST en SQL Oracle
Erreur ORA-01722 : invalid number
Description : Cette erreur survient lorsque vous tentez de convertir une chaîne de caractères en type numérique (NUMBER, INTEGER, etc.) et que la chaîne contient des caractères non numériques ou un format incompatible.
-- Exemple d'erreur : la valeur 'N/A' ne peut pas être convertie en NUMBER
SELECT CAST('N/A' AS NUMBER) FROM DUAL;
-- Résultat : ORA-01722: invalid number
Solution : Avant d’effectuer la conversion, validez ou filtrez vos données source avec la fonction REGEXP_LIKE ou utilisez une expression CASE pour gérer les valeurs non convertibles :
-- Solution : utiliser CASE pour gérer les valeurs non numériques
SELECT
CASE
WHEN REGEXP_LIKE(valeur_texte, '^\d+(\.\d+)?$')
THEN CAST(valeur_texte AS NUMBER)
ELSE NULL
END AS valeur_numerique
FROM
ma_table;
Cette approche défensive est particulièrement recommandée lors de migrations de données ou d’intégrations avec des systèmes externes dont la qualité des données n’est pas garantie.
Résumé
| Point clé | Détail |
|---|---|
| Rôle de CAST | Conversion explicite d’un type de données vers un autre |
| Syntaxe | CAST(expression AS type_cible) |
| Types supportés | VARCHAR2, NUMBER, INTEGER, DATE, TIMESTAMP, CHAR, FLOAT |
| Norme | Conforme SQL ANSI, portable vers d’autres SGBD |
| Erreur fréquente | ORA-01722 lors de la conversion d’une chaîne invalide en nombre |
| Alternative Oracle | TO_NUMBER(), TO_DATE(), TO_CHAR() pour plus de contrôle du format |
2 bonnes pratiques Oracle avec CAST
- Préférez CAST pour la portabilité : si votre code SQL doit être lisible par des équipes habituées à plusieurs SGBD (PostgreSQL, SQL Server, Oracle), utilisez
CASTplutôt que les fonctions propriétaires Oracle (TO_NUMBER,TO_CHAR). Cela facilite la maintenance et les revues de code. - Combinez CAST avec TO_CHAR pour les dates : lorsque vous convertissez une date en chaîne, n’utilisez pas
CASTseul, car le résultat dépend des paramètres NLS de la session. Utilisez systématiquementTO_CHAR(date_col, 'YYYY-MM-DD')pour garantir un format stable en production.
Aller plus loin
Pour approfondir vos connaissances sur les conversions et la manipulation des types de données en SQL Oracle, nous vous recommandons les cours suivants :
- La fonction TO_CHAR en SQL Oracle : maîtrisez la conversion de dates et de nombres en chaînes de caractères avec une gestion fine du format d’affichage.
- La fonction TO_NUMBER en SQL Oracle : découvrez comment convertir des chaînes de caractères en valeurs numériques avec gestion des formats et des séparateurs décimaux.
- La fonction TO_DATE en SQL Oracle : apprenez à transformer des chaînes textuelles en dates Oracle exploitables dans vos requêtes et vos calculs d’intervalles.
