DATEDIFF n'existe pas en Oracle (c'est une fonction SQL Server / MySQL). En Oracle SQL, on soustrait simplement deux dates : le résultat est un nombre de jours, qu'on convertit ensuite en heures, minutes ou secondes.
🧪 Testez ce code vous-même : exécutez ces requêtes gratuitement dans notre SQL Playground en ligne — sans installation, directement dans le navigateur.
Différence en jours
SELECT date_fin - date_debut AS nb_jours FROM projets;
SELECT SYSDATE - date_commande AS anciennete_jours FROM commandes;Voir aussi : SYSDATE en Oracle.
Heures, minutes, secondes
SELECT (date2 - date1) * 24 AS heures,
(date2 - date1) * 24 * 60 AS minutes,
(date2 - date1) * 86400 AS secondes
FROM ma_table;Différence en mois : MONTHS_BETWEEN
SELECT MONTHS_BETWEEN(SYSDATE, date_embauche) AS mois_anciennete FROM employes;
-- en années :
SELECT TRUNC(MONTHS_BETWEEN(SYSDATE, date_naissance) / 12) AS age FROM personnes;Avec des TIMESTAMP : un INTERVAL
Soustraire deux TIMESTAMP renvoie un INTERVAL DAY TO SECOND. Utilisez EXTRACT pour en tirer chaque composante :
SELECT EXTRACT(DAY FROM (ts2 - ts1)) AS jours,
EXTRACT(HOUR FROM (ts2 - ts1)) AS heures
FROM logs;Équivalents DATEDIFF les plus demandés
| SQL Server | Équivalent Oracle |
|---|---|
| DATEDIFF(day, d1, d2) | d2 – d1 |
| DATEDIFF(hour, d1, d2) | (d2 – d1) * 24 |
| DATEDIFF(month, d1, d2) | MONTHS_BETWEEN(d2, d1) |
| DATEDIFF(year, d1, d2) | MONTHS_BETWEEN(d2, d1) / 12 |
Questions fréquentes
Pourquoi DATEDIFF ne fonctionne pas en Oracle ?
DATEDIFF est une fonction SQL Server et MySQL. Oracle n’en a pas besoin : soustraire deux dates (date2 – date1) renvoie directement le nombre de jours, en décimal.
Comment calculer un âge en années en Oracle ?
TRUNC(MONTHS_BETWEEN(SYSDATE, date_naissance) / 12) donne l’âge exact en années révolues, en tenant compte des mois et des jours.
Comment obtenir la différence en jours entiers, sans décimales ?
Utilisez TRUNC(date2) – TRUNC(date1) pour ignorer l’heure, ou TRUNC(date2 – date1) pour tronquer le résultat décimal.
