Fonctions de Dates

Manipuler et calculer avec les dates

25 min
INTERMEDIAIRE
Objectifs de cette leçon
  • Obtenir la date système avec SYSDATE
  • Ajouter ou retirer des mois avec ADD_MONTHS
  • Calculer la différence entre deux dates avec MONTHS_BETWEEN
  • Trouver le dernier jour du mois avec LAST_DAY
  • Obtenir le prochain jour spécifique avec NEXT_DAY
  • Tronquer des dates avec TRUNC
  • Extraire année, mois, jour avec EXTRACT
  • Effectuer des calculs d''ancienneté et d''intervalles

Les Fonctions de Dates

Les fonctions de dates permettent de manipuler les dates, calculer des intervalles, extraire des composants (année, mois, jour) et effectuer des opérations temporelles.

Principales Fonctions de Dates

1. SYSDATE - Date Système Actuelle

SELECT SYSDATE AS date_actuelle,
       SYSDATE + 7 AS dans_une_semaine,
       SYSDATE - 30 AS il_y_a_30_jours
FROM DUAL;

SYSDATE retourne la date et l'heure courantes du serveur. Vous pouvez ajouter ou soustraire des jours.

2. ADD_MONTHS - Ajouter des Mois

SELECT date_embauche,
       ADD_MONTHS(date_embauche, 3) AS apres_3_mois,
       ADD_MONTHS(date_embauche, -6) AS avant_6_mois
FROM EMPLOYES;

ADD_MONTHS(date, nombre) ajoute (ou retire si négatif) un nombre de mois à une date.

3. MONTHS_BETWEEN - Différence en Mois

SELECT nom,
       date_embauche,
       ROUND(MONTHS_BETWEEN(SYSDATE, date_embauche), 1) AS mois_anciennete
FROM EMPLOYES;

MONTHS_BETWEEN(date1, date2) retourne le nombre de mois entre deux dates.

4. LAST_DAY - Dernier Jour du Mois

SELECT SYSDATE,
       LAST_DAY(SYSDATE) AS dernier_jour_mois,
       LAST_DAY(SYSDATE) - SYSDATE AS jours_restants
FROM DUAL;

5. NEXT_DAY - Prochain Jour de la Semaine

SELECT SYSDATE,
       NEXT_DAY(SYSDATE, 'MONDAY') AS prochain_lundi
FROM DUAL;

6. TRUNC - Tronquer une Date

SELECT date_embauche,
       TRUNC(date_embauche, 'MONTH') AS debut_mois,
       TRUNC(date_embauche, 'YEAR') AS debut_annee
FROM EMPLOYES;

Tronque la date au début du mois, de l'année, etc.

7. EXTRACT - Extraire un Composant

SELECT date_embauche,
       EXTRACT(YEAR FROM date_embauche) AS annee,
       EXTRACT(MONTH FROM date_embauche) AS mois,
       EXTRACT(DAY FROM date_embauche) AS jour
FROM EMPLOYES;
Bonne pratique : Pour calculer l'ancienneté en années, utilisez : FLOOR(MONTHS_BETWEEN(SYSDATE, date_embauche) / 12)

Opérations sur les Dates

-- Employés embauchés il y a plus de 5 ans
SELECT nom, date_embauche
FROM EMPLOYES
WHERE date_embauche < ADD_MONTHS(SYSDATE, -60);

-- Calculer le nombre de jours d'ancienneté
SELECT nom,
       TRUNC(SYSDATE - date_embauche) AS jours_anciennete,
       TRUNC((SYSDATE - date_embauche) / 365.25, 1) AS annees_anciennete
FROM EMPLOYES;

-- Trouver les employés embauchés un lundi
SELECT nom, date_embauche,
       TO_CHAR(date_embauche, 'DAY') AS jour_semaine
FROM EMPLOYES
WHERE TO_CHAR(date_embauche, 'DY') = 'MON';
Attention : Une date moins une date = nombre de jours (type NUMBER). Une date plus/moins un nombre = nouvelle date.
Exemples de code
Calculer l'ancienneté des employés

Utilise MONTHS_BETWEEN pour calculer la différence avec SYSDATE, divise par 12 pour les années, et utilise MOD pour obtenir les mois restants. TRUNC évite les décimales.

Résultat attendu : Affiche l'ancienneté de chaque employé en années et mois, ainsi que le total en mois

Dates importantes relatives à l'embauche

Combine ADD_MONTHS pour projeter dans le futur (fin de période d'essai, anniversaire), LAST_DAY pour le dernier jour du mois d'embauche, et EXTRACT pour filtrer par année.

Résultat attendu : Calcule des dates clés pour les employés embauchés depuis 2020
Exercices pratiques
Exercice 1 : Employés anciens
FACILE
Trouvez tous les employés qui ont plus de 10 ans d'ancienneté. Affichez leur nom, date d'embauche et le nombre exact d'années (arrondi à 1 décimale).
Voir l'indice
Utilisez MONTHS_BETWEEN avec SYSDATE, divisez par 12 pour convertir en années, et comparez avec 10 dans le WHERE.

Exercice 2 : Anniversaires du trimestre
DIFFICILE
Trouvez les employés dont l'anniversaire d'embauche (même jour et mois, peu importe l'année) tombe dans les 3 prochains mois. Affichez leur nom et la date de leur prochain anniversaire.
Voir l'indice
Reconstituez la date d'anniversaire pour l'année en cours avec EXTRACT pour le mois et jour, puis comparez avec une plage de 3 mois avec BETWEEN.
Accueil