Fonctions de Conversion

Transformer et formater les types de données

30 min
INTERMEDIAIRE
Objectifs de cette leçon
  • Convertir des nombres en chaînes formatées avec TO_CHAR
  • Formater des dates pour l''affichage avec TO_CHAR
  • Convertir des chaînes en nombres avec TO_NUMBER
  • Convertir des chaînes en dates avec TO_DATE
  • Comprendre la différence entre conversions implicites et explicites
  • Gérer les valeurs NULL avec NVL et COALESCE
  • Maîtriser les formats de nombres et de dates

Les Fonctions de Conversion

Les fonctions de conversion permettent de transformer des données d'un type à un autre (chaîne, nombre, date) et de formater les valeurs pour l'affichage.

Principales Fonctions de Conversion

1. TO_CHAR - Convertir en Chaîne

Conversion de Nombres
SELECT salaire,
       TO_CHAR(salaire, '999,999') AS salaire_formate,
       TO_CHAR(salaire, '$999,999.00') AS salaire_dollars,
       TO_CHAR(salaire, '0999999') AS avec_zeros
FROM EMPLOYES;

Formats numériques courants :

  • 9 : chiffre (espace si absent)
  • 0 : chiffre (zéro si absent)
  • , : séparateur de milliers
  • . : séparateur décimal
  • $ : symbole dollar
  • L : symbole monétaire local
Conversion de Dates
SELECT date_embauche,
       TO_CHAR(date_embauche, 'DD/MM/YYYY') AS format_fr,
       TO_CHAR(date_embauche, 'Month DD, YYYY') AS format_long,
       TO_CHAR(date_embauche, 'DAY') AS jour_semaine,
       TO_CHAR(date_embauche, 'HH24:MI:SS') AS heure
FROM EMPLOYES;

Formats de dates courants :

  • DD : jour (01-31)
  • MM : mois numérique (01-12)
  • YYYY : année sur 4 chiffres
  • Month : nom du mois
  • DAY : nom du jour
  • HH24 : heure (00-23)
  • MI : minutes
  • SS : secondes

2. TO_NUMBER - Convertir en Nombre

SELECT TO_NUMBER('1234.56') AS nombre,
       TO_NUMBER('$1,234.56', '$9,999.99') AS avec_format
FROM DUAL;

3. TO_DATE - Convertir en Date

SELECT TO_DATE('01/01/2024', 'DD/MM/YYYY') AS date1,
       TO_DATE('2024-01-01', 'YYYY-MM-DD') AS date2,
       TO_DATE('January 1, 2024', 'Month DD, YYYY') AS date3
FROM DUAL;
Bonne pratique : Spécifiez toujours le format lors de la conversion pour éviter les ambiguïtés liées aux paramètres régionaux (01/02/2024 peut être le 1er février ou le 2 janvier selon la locale).

Conversions Implicites vs Explicites

-- Conversion implicite (déconseillée)
SELECT * FROM EMPLOYES WHERE emp_id = '101';

-- Conversion explicite (recommandée)
SELECT * FROM EMPLOYES WHERE emp_id = TO_NUMBER('101');

Exemples Pratiques

-- Formater un rapport de salaires
SELECT nom,
       TO_CHAR(date_embauche, 'DD/MM/YYYY') AS embauche,
       TO_CHAR(salaire, 'L999G999D00', 'NLS_CURRENCY=€ NLS_NUMERIC_CHARACTERS=,') AS salaire_euros
FROM EMPLOYES;

-- Convertir une chaîne en date pour une comparaison
SELECT nom
FROM EMPLOYES
WHERE date_embauche > TO_DATE('01/01/2020', 'DD/MM/YYYY');

-- Extraire l''année d''une date comme chaîne
SELECT nom,
       TO_CHAR(date_embauche, 'YYYY') AS annee_embauche
FROM EMPLOYES
WHERE TO_CHAR(date_embauche, 'YYYY') = '2021';
Attention : Les conversions implicites peuvent causer des erreurs ou des performances dégradées. Utilisez toujours des conversions explicites dans les requêtes professionnelles.

Fonction NVL et COALESCE pour Gérer NULL

SELECT nom,
       NVL(commission, 0) AS commission,
       NVL(TO_CHAR(email), 'Pas d''email') AS email,
       COALESCE(commission, salaire * 0.1, 0) AS commission_finale
FROM EMPLOYES;

NVL(valeur, remplacement) remplace NULL par une valeur par défaut.
COALESCE retourne la première valeur non-NULL de la liste.

Exemples de code
Formater les salaires pour un rapport

Utilise TO_CHAR pour formater les dates (format court et long) et les nombres (avec symbole dollar et séparateurs). NVL remplace les commissions NULL par 'N/A'.

Résultat attendu : Affiche un rapport formaté des employés du département 20 avec dates et montants lisibles

Extraire et analyser par année

Extrait l'année avec TO_CHAR pour grouper, compte les embauches, calcule le salaire moyen formaté, et trouve la première embauche de chaque année. Démontre l'usage de TO_CHAR dans GROUP BY.

Résultat attendu : Groupe les employés par année d'embauche et affiche des statistiques formatées
Exercices pratiques
Exercice 1 : Rapport mensuel
MOYEN
Créez un rapport montrant le nombre d'employés embauchés par mois (format "Month YYYY"). Affichez le mois et le nombre d'embauches, triés chronologiquement.
Voir l'indice
Utilisez TO_CHAR avec 'Month YYYY' pour le format d'affichage, et groupez également par 'YYYY-MM' pour un tri correct.

Exercice 2 : Calcul de bonus formaté
FACILE
Pour chaque employé, calculez un bonus de 10% du salaire. Affichez le nom, le salaire formaté avec symbole $ et séparateurs, le bonus formaté de la même manière, et le total (salaire + bonus) également formaté. N'affichez que les employés avec un salaire supérieur à 50000.
Voir l'indice
Calculez le bonus en multipliant par 0.10, le total en multipliant par 1.10, et utilisez TO_CHAR avec le format '$999,999.00' pour chaque montant.
Accueil