TIMESTAMP Oracle : Guide complet du type de données

Découvrez le type TIMESTAMP Oracle : définition, syntaxe, exemples pratiques et erreurs courantes. Maîtrisez la gestion des dates et heures en SQL Oracle.

Illustration du tutoriel SQL Oracle : TIMESTAMP Oracle : Guide complet du type de données

null

Publicité

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 0 et 9. La valeur par défaut est 6.

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 ZONE

Fonctions 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.

Publicité

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émentDétail
Type de donnéesTIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE
Précision par défaut6 chiffres après la virgule (microsecondes)
Précision maximale9 chiffres (nanosecondes)
Différence avec DATEDATE = précision à la seconde ; TIMESTAMP = fractions de secondes
Fonction systèmeSYSTIMESTAMP, CURRENT_TIMESTAMP, LOCALTIMESTAMP
Conversion chaîne → TIMESTAMPTO_TIMESTAMP(chaîne, format)
Formatage affichageTO_CHAR(timestamp, ‘DD/MM/YYYY HH24:MI:SS.FF3’)
Calcul de duréeSoustraction de deux TIMESTAMP → type INTERVAL DAY TO SECOND
Erreur fréquenteComparer un TIMESTAMP avec TO_DATE() → perte de précision

2 bonnes pratiques Oracle avec TIMESTAMP

  1. Toujours spécifier la précision explicitement lors de la création d’une colonne TIMESTAMP. Définir TIMESTAMP(3) pour les millisecondes ou TIMESTAMP(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.
  2. 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

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é