
null
—
TIMESTAMP Oracle : Maîtriser les dates et heures en SQL
Le type de données TIMESTAMP Oracle est une extension puissante du type DATE qui permet de stocker des informations temporelles avec une précision à la fraction de seconde. Incontournable dans les applications nécessitant un suivi précis des événements, le TIMESTAMP Oracle est utilisé dans des domaines variés tels que la finance, la logistique ou les systèmes d’audit. Ce cours vous guide pas à pas dans sa maîtrise.
🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.
Définition et utilisation du TIMESTAMP Oracle
Le type TIMESTAMP est un type de données natif d’Oracle qui stocke une date et une heure, incluant les fractions de secondes. Contrairement au type DATE classique qui ne conserve que l’heure à la seconde près, TIMESTAMP offre une précision allant jusqu’à 9 chiffres après la virgule (nanosecondes).
Oracle propose plusieurs variantes du type TIMESTAMP :
- TIMESTAMP : stocke la date et l’heure avec fractions de secondes, sans information de fuseau horaire.
- TIMESTAMP WITH TIME ZONE : inclut en plus le décalage par rapport à UTC (ex. :
+02:00). - TIMESTAMP WITH LOCAL TIME ZONE : normalise la valeur en UTC dans la base de données et la restitue dans le fuseau horaire de la session.
Cas d’usage en entreprise
Le TIMESTAMP Oracle est particulièrement utile dans les situations suivantes :
- Audit et traçabilité : enregistrer l’heure exacte d’une modification de données (log de transactions bancaires, piste d’audit RH).
- Applications temps réel : horodater des événements IoT, des tickets de support, des commandes e-commerce à la milliseconde.
- Synchronisation multi-fuseaux horaires : gérer des applications internationales avec
TIMESTAMP WITH TIME ZONE. - Calculs de durée précis : mesurer des intervalles de temps fins entre deux événements système.
Syntaxe du TIMESTAMP Oracle
La syntaxe de déclaration d’une colonne ou variable de type TIMESTAMP est la suivante :
nom_colonne TIMESTAMP [(précision_fractions_secondes)]Paramètres essentiels
- précision_fractions_secondes : nombre de chiffres après la virgule pour les secondes. Valeur comprise entre
0et9. La valeur par défaut est6.
Exemples de déclarations valides :
-- TIMESTAMP avec précision par défaut (6 chiffres)
date_evenement TIMESTAMP
-- TIMESTAMP avec précision de 3 chiffres (millisecondes)
date_commande TIMESTAMP(3)
-- TIMESTAMP avec fuseau horaire
date_transaction TIMESTAMP(6) WITH TIME ZONE
-- TIMESTAMP avec fuseau horaire local
date_session TIMESTAMP(6) WITH LOCAL TIME ZONEFonctions Oracle utiles avec TIMESTAMP
SYSTIMESTAMP: retourne le TIMESTAMP courant du système (avec fuseau horaire).CURRENT_TIMESTAMP: retourne le TIMESTAMP courant dans le fuseau horaire de la session.LOCALTIMESTAMP: retourne le TIMESTAMP local sans fuseau horaire.TO_TIMESTAMP(chaîne, format): convertit une chaîne en TIMESTAMP.TO_CHAR(timestamp, format): formate un TIMESTAMP en chaîne lisible.
Exemples pratiques de TIMESTAMP Oracle
Exemple 1 – Création d’une table d’audit avec TIMESTAMP
Contexte métier : Un service informatique souhaite tracer chaque modification effectuée sur la table des employés, avec l’horodatage précis à la milliseconde.
-- Création de la table d'audit des employés
CREATE TABLE audit_employes (
id_audit NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
id_employe NUMBER NOT NULL,
action VARCHAR2(50) NOT NULL, -- INSERT, UPDATE, DELETE
date_action TIMESTAMP(3) DEFAULT LOCALTIMESTAMP, -- Précision à la milliseconde
utilisateur VARCHAR2(100) DEFAULT USER
);
-- Insertion d'un enregistrement d'audit
INSERT INTO audit_employes (id_employe, action)
VALUES (1042, 'UPDATE');
-- Consultation avec formatage de la date
SELECT
id_audit,
id_employe,
action,
TO_CHAR(date_action, 'DD/MM/YYYY HH24:MI:SS.FF3') AS horodatage,
utilisateur
FROM audit_employes;
Résultat attendu : La colonne horodatage affiche par exemple 15/06/2025 14:32:07.843, ce qui permet une traçabilité précise des opérations.
Exemple 2 – Calcul de durée entre deux TIMESTAMP
Contexte métier : Un centre d’appels souhaite mesurer la durée exacte de chaque appel client pour produire des rapports de performance.
-- Création de la table des appels clients
CREATE TABLE appels_clients (
id_appel NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
id_client NUMBER NOT NULL,
debut_appel TIMESTAMP(6) NOT NULL,
fin_appel TIMESTAMP(6),
conseiller VARCHAR2(100)
);
-- Insertion d'un appel exemple
INSERT INTO appels_clients (id_client, debut_appel, fin_appel, conseiller)
VALUES (
5501,
TO_TIMESTAMP('2025-06-15 09:15:32.123456', 'YYYY-MM-DD HH24:MI:SS.FF6'),
TO_TIMESTAMP('2025-06-15 09:27:48.654321', 'YYYY-MM-DD HH24:MI:SS.FF6'),
'Marie Dupont'
);
-- Calcul de la durée en minutes et secondes
SELECT
id_appel,
id_client,
conseiller,
TO_CHAR(debut_appel, 'HH24:MI:SS.FF3') AS debut,
TO_CHAR(fin_appel, 'HH24:MI:SS.FF3') AS fin,
-- Extraction de la différence sous forme d'INTERVAL
(fin_appel - debut_appel) AS duree_interval,
EXTRACT(MINUTE FROM (fin_appel - debut_appel)) AS minutes,
ROUND(EXTRACT(SECOND FROM (fin_appel - debut_appel)), 0) AS secondes
FROM appels_clients
WHERE id_appel = 1;
Résultat attendu : La requête retourne la durée exacte de l’appel : 12 minutes et 16 secondes, grâce au calcul sur les fractions de secondes permis par TIMESTAMP.
Erreurs courantes avec TIMESTAMP Oracle
Erreur : Confusion entre DATE et TIMESTAMP lors des comparaisons
Une erreur fréquente consiste à comparer un champ TIMESTAMP avec une valeur littérale au format DATE en utilisant TO_DATE(), ce qui peut provoquer des conversions implicites et des résultats inattendus, voire des pertes de précision.
Exemple incorrect :
-- ❌ Mauvaise pratique : TO_DATE perd les fractions de secondes
SELECT * FROM appels_clients
WHERE debut_appel = TO_DATE('2025-06-15 09:15:32', 'YYYY-MM-DD HH24:MI:SS');
Solution correcte :
-- ✅ Bonne pratique : utiliser TO_TIMESTAMP pour respecter le type
SELECT * FROM appels_clients
WHERE debut_appel = TO_TIMESTAMP('2025-06-15 09:15:32.123456', 'YYYY-MM-DD HH24:MI:SS.FF6');
-- ✅ Ou utiliser une plage de temps avec BETWEEN pour plus de souplesse
SELECT * FROM appels_clients
WHERE debut_appel BETWEEN
TO_TIMESTAMP('2025-06-15 09:15:32', 'YYYY-MM-DD HH24:MI:SS')
AND
TO_TIMESTAMP('2025-06-15 09:15:33', 'YYYY-MM-DD HH24:MI:SS');
Toujours utiliser TO_TIMESTAMP() pour manipuler des valeurs TIMESTAMP et éviter toute conversion implicite silencieuse qu’Oracle pourrait effectuer avec un TO_DATE().
Résumé
| Élément | Détail |
|---|---|
| Type de données | TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE |
| Précision par défaut | 6 chiffres après la virgule (microsecondes) |
| Précision maximale | 9 chiffres (nanosecondes) |
| Différence avec DATE | DATE = précision à la seconde ; TIMESTAMP = fractions de secondes |
| Fonction système | SYSTIMESTAMP, CURRENT_TIMESTAMP, LOCALTIMESTAMP |
| Conversion chaîne → TIMESTAMP | TO_TIMESTAMP(chaîne, format) |
| Formatage affichage | TO_CHAR(timestamp, ‘DD/MM/YYYY HH24:MI:SS.FF3’) |
| Calcul de durée | Soustraction de deux TIMESTAMP → type INTERVAL DAY TO SECOND |
| Erreur fréquente | Comparer un TIMESTAMP avec TO_DATE() → perte de précision |
2 bonnes pratiques Oracle avec TIMESTAMP
- Toujours spécifier la précision explicitement lors de la création d’une colonne TIMESTAMP. Définir
TIMESTAMP(3)pour les millisecondes ouTIMESTAMP(6)pour les microsecondes évite les comportements imprévus liés à la valeur par défaut et rend le schéma de base de données plus lisible et maintenable. - Utiliser SYSTIMESTAMP plutôt que SYSDATE pour les colonnes d’audit et de traçabilité. SYSTIMESTAMP retourne un TIMESTAMP WITH TIME ZONE, ce qui garantit une précision maximale et facilite la synchronisation dans les environnements multi-fuseaux horaires ou distribués.
Aller plus loin
Pour approfondir votre maîtrise de la gestion du temps en SQL Oracle, nous vous recommandons les sujets suivants :
- Le type DATE Oracle : comprenez les différences fondamentales entre DATE et TIMESTAMP, et sachez quand utiliser l’un ou l’autre dans vos modèles de données.
- Les types INTERVAL Oracle : apprenez à manipuler des durées avec INTERVAL DAY TO SECOND et INTERVAL YEAR TO MONTH, types retournés lors de la soustraction de deux TIMESTAMP.
- La fonction TO_TIMESTAMP Oracle : maîtrisez tous les formats de conversion disponibles et évitez les erreurs ORA-01830 liées aux masques de format incomplets.
Sur le même thème
- DROP SQL Oracle : supprimer des objets de base de données
- ORDER BY en SQL Oracle : tri des résultats expliqué
- JOIN en SQL Oracle : Guide Complet avec Exemples
- LEFT JOIN en Oracle SQL : Guide complet et exemples
- RIGHT JOIN en Oracle SQL : syntaxe et exemples pratiques
- PARTITION Oracle SQL : Guide complet avec exemples
