
La fonction SQL ORACLE EXTRACT extraie n’importe quelle partie d’un champ DATE. Les champs qu’on peut extraire sont:
YEAR : Année
MOUNTH : Mois
DAY : Jour
SELECT EXTRACT(YEAR FROM SYSDATE), EXTRACT(MONTH FROM SYSDATE), EXTRACT(DAY FROM SYSDATE) FROM DUAL;
EXTRACT(YEARFROMSYSDATE) EXTRACT(MONTHFROMSYSDATE) EXTRACT(DAYFROMSYSDATE) ------------------------ ------------------------- ----------------------- 2016 2 18
Syntaxe de EXTRACT en SQL Oracle
EXTRACT(composante FROM date_ou_timestamp)EXTRACT isole une partie précise d'une date : année, mois, jour, heure, minute ou seconde. Le résultat est un nombre, directement utilisable dans des calculs ou des GROUP BY.
🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.
| Composante | Type source | Exemple sur le 15/03/2026 14:30 |
|---|---|---|
| YEAR | DATE / TIMESTAMP | 2026 |
| MONTH | DATE / TIMESTAMP | 3 |
| DAY | DATE / TIMESTAMP | 15 |
| HOUR | TIMESTAMP uniquement | 14 |
| MINUTE | TIMESTAMP uniquement | 30 |
| SECOND | TIMESTAMP uniquement | 0 |
Exemples pratiques de EXTRACT
SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL; -- 2026
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; -- 3
SELECT EXTRACT(DAY FROM date_commande) FROM commandes;Regrouper un chiffre d’affaires par année et par mois — l’usage n°1 de EXTRACT :
SELECT EXTRACT(YEAR FROM date_vente) AS annee,
EXTRACT(MONTH FROM date_vente) AS mois,
SUM(montant) AS ca
FROM ventes
GROUP BY EXTRACT(YEAR FROM date_vente), EXTRACT(MONTH FROM date_vente)
ORDER BY annee, mois;Filtrer sur une année :
SELECT * FROM commandes WHERE EXTRACT(YEAR FROM date_commande) = 2026;Le piège HOUR sur un type DATE
Un DATE Oracle contient pourtant l’heure, mais EXTRACT(HOUR FROM une_date) déclenche l’erreur ORA-30076. Convertissez d’abord en TIMESTAMP :
SELECT EXTRACT(HOUR FROM CAST(date_creation AS TIMESTAMP)) FROM logs;
-- ou plus simple, avec TO_CHAR :
SELECT TO_CHAR(date_creation, 'HH24') FROM logs;EXTRACT vs TO_CHAR : lequel utiliser ?
| Critère | EXTRACT | TO_CHAR |
|---|---|---|
| Type de résultat | NUMBER (calculs directs) | VARCHAR2 (affichage) |
| Standard SQL | oui | non (propre à Oracle) |
| Heures sur un DATE | non (ORA-30076) | oui |
| Formats riches (jour en lettres…) | non | oui |
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; -- 3 (nombre)
SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL; -- '03' (texte)
SELECT TO_CHAR(SYSDATE, 'Month','NLS_DATE_LANGUAGE=FRENCH') FROM DUAL; -- 'Mars'Règle simple : EXTRACT pour calculer et regrouper, TO_CHAR pour afficher et formater.
