TO_DATE Oracle : Convertir une chaîne en date SQL

Découvrez la fonction TO_DATE en Oracle SQL : syntaxe, paramètres, exemples pratiques et erreurs courantes. Maîtrisez la conversion de chaînes en dates.

Illustration du tutoriel SQL Oracle : TO_DATE Oracle : Convertir une chaîne en date SQL

Publicité

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

TO_DATE Oracle : Convertir une chaîne de caractères en date

La fonction TO_DATE est l’une des fonctions de conversion les plus utilisées en Oracle SQL. Elle permet de transformer une chaîne de caractères en valeur de type DATE, à condition de lui préciser le format correspondant. Que vous importiez des données depuis un fichier CSV, traitiez des saisies utilisateurs ou effectuiez des requêtes filtrées par période, TO_DATE est un outil incontournable dans le développement Oracle.

Définition et utilisation de TO_DATE

La fonction TO_DATE convertit une valeur textuelle en type de données DATE natif d’Oracle. Ce type stocke à la fois la date et l’heure (année, mois, jour, heure, minute, seconde).

En entreprise, on rencontre fréquemment cette fonction dans les situations suivantes :

  • Importation de données : les dates issues de fichiers plats (CSV, TXT) arrivent sous forme de texte et doivent être converties avant insertion en base.
  • Filtres temporels dans les requêtes : comparer une colonne DATE avec une date littérale saisie sous forme de chaîne.
  • Procédures stockées et scripts PL/SQL : initialiser des variables de type DATE à partir de valeurs textuelles dynamiques.
  • Migration de données : harmoniser des formats de dates hétérogènes provenant de systèmes sources différents.

Sans TO_DATE, Oracle ne sait pas interpréter automatiquement une chaîne comme '15/04/2024' en tant que date valide, ce qui entraîne des erreurs ou des comportements imprévisibles liés au paramètre NLS_DATE_FORMAT de la session.

Syntaxe complète de TO_DATE

TO_DATE( chaîne , format [, nlsparam] )

Description des paramètres

ParamètreTypeDescription
chaîneVARCHAR2 / CHAR / NCHARLa chaîne de caractères à convertir en date.
formatVARCHAR2Le masque de format décrivant la structure de la chaîne (ex. 'DD/MM/YYYY').
nlsparamVARCHAR2 (optionnel)Paramètre de session NLS, utile pour les noms de mois dans une langue spécifique (ex. 'NLS_DATE_LANGUAGE=FRENCH').

Principaux éléments de format

ÉlémentSignificationExemple
DDJour du mois (01-31)15
MMMois en chiffres (01-12)04
MONAbréviation du mois en lettresAPR
MONTHNom complet du moisAPRIL
YYYYAnnée sur 4 chiffres2024
YYAnnée sur 2 chiffres24
HH24Heure au format 24h14
MIMinutes30
SSSecondes00

Exemples pratiques de TO_DATE en Oracle

Exemple 1 – Filtrer les commandes passées après une date donnée

Contexte métier : Une application de gestion commerciale doit extraire toutes les commandes enregistrées après le 1er janvier 2024. La date est passée sous forme de chaîne dans la requête.

-- Sélection des commandes après le 01/01/2024
SELECT
    commande_id,
    client_id,
    montant,
    date_commande
FROM
    commandes
WHERE
    date_commande > TO_DATE('01/01/2024', 'DD/MM/YYYY')
ORDER BY
    date_commande ASC;

Dans cet exemple, TO_DATE('01/01/2024', 'DD/MM/YYYY') convertit la chaîne en une valeur DATE comparable à la colonne date_commande. Sans cette conversion explicite, Oracle dépendrait du format NLS de la session, ce qui peut produire des résultats erronés ou une erreur ORA-01858.

Exemple 2 – Insertion d’un enregistrement avec une date et une heure précises

Contexte métier : Un script d’alimentation insère un nouvel employé en base avec sa date d’embauche et l’heure exacte de l’opération.

-- Insertion d'un nouvel employé avec date et heure d'embauche
INSERT INTO employes (
    employe_id,
    nom,
    prenom,
    date_embauche
)
VALUES (
    1042,
    'DUPONT',
    'Marie',
    TO_DATE('15/04/2024 09:30:00', 'DD/MM/YYYY HH24:MI:SS')
);

COMMIT;

Ici, le format 'DD/MM/YYYY HH24:MI:SS' indique à Oracle que la chaîne contient à la fois une date et une heure. Sans la partie horaire dans le masque, les secondes et minutes seraient ignorées ou provoqueraient une erreur de format.

Publicité

Erreurs courantes avec TO_DATE

Erreur ORA-01830 : le format de date se termine avant la conversion de la chaîne

Cette erreur survient lorsque la chaîne fournie est plus longue que ce que le masque de format attend.

Exemple d’erreur :

-- Provoque ORA-01830
SELECT TO_DATE('15/04/2024 10:00', 'DD/MM/YYYY') FROM DUAL;

Le masque 'DD/MM/YYYY' ne couvre pas la partie heure '10:00' présente dans la chaîne. Oracle ne sait pas quoi faire du reste de la chaîne et lève une erreur.

Solution : Adapter le masque au contenu réel de la chaîne :

-- Correct : le masque correspond à la chaîne complète
SELECT TO_DATE('15/04/2024 10:00', 'DD/MM/YYYY HH24:MI') FROM DUAL;

Règle à retenir : Le masque de format doit toujours correspondre exactement à la structure de la chaîne passée en entrée, ni plus, ni moins.

Résumé des points clés

Point cléDétail
Rôle de TO_DATEConvertit une chaîne VARCHAR2 en type DATE Oracle
Paramètres principauxChaîne à convertir + masque de format obligatoire
Paramètre optionnelnlsparam pour gérer les langues (noms de mois)
Formats courantsDD/MM/YYYY, YYYY-MM-DD, DD/MM/YYYY HH24:MI:SS
Erreur fréquenteORA-01830 : masque incomplet par rapport à la chaîne
Type retournéDATE (inclut date + heure dans Oracle)

Bonnes pratiques Oracle

  1. Toujours spécifier le masque de format explicitement. Ne jamais laisser Oracle déduire le format à partir du paramètre NLS_DATE_FORMAT de la session, car ce paramètre varie selon les environnements (développement, recette, production) et rend le code non portable.
  2. Préférer le format ISO YYYY-MM-DD dans les scripts de migration et ETL. Ce format universel réduit les risques de confusion entre les formats américains (MM/DD/YYYY) et européens (DD/MM/YYYY), et facilite le tri et la lisibilité des scripts.

Aller plus loin

Vous maîtrisez maintenant la fonction TO_DATE en Oracle SQL. Pour approfondir vos compétences sur la gestion des dates et des conversions de données, consultez ces ressources complémentaires sur courssql.com :

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é