CodeGym /Cours /SQL SELF /Travailler avec les intervalles de temps : INTERVAL

Travailler avec les intervalles de temps : INTERVAL

SQL SELF
Niveau 31 , Leçon 4
Disponible

L’entraînement dure une heure et demie, la journée de taf — 8 heures, la pause — 20 minutes, et faire cuire des œufs prend 10 minutes. Tout ça, c’est des intervalles de temps.

Les intervalles de temps sont super utiles dans les applis réelles, genre quand tu dois calculer les délais d’exécution des tâches, trouver la différence entre deux dates ou ajouter/soustraire du temps. Mais avant d’aller plus loin, petit rappel de ce qu’on a vu dans les cours précédents.

Dans PostgreSQL, INTERVAL c’est un type de données spécial fait pour représenter des périodes de temps. Contrairement aux autres types temporels, il ne stocke pas une date ou une heure précise, mais décrit une durée, genre : "2 jours", "3 heures", "5 minutes".

Syntaxe de INTERVAL

Tu peux définir un intervalle comme ça :

INTERVAL 'nombre unité_de_temps'

Exemples :

INTERVAL '2 days' -- Deux jours
INTERVAL '3 hours' -- Trois heures
INTERVAL '15 minutes' -- Quinze minutes
INTERVAL '1 day 2 hours' -- Un jour et deux heures

PostgreSQL gère plein d’unités de temps différentes : year, month, day, hour, minute, second. Tu peux les combiner dans la même expression.

Utiliser les intervalles dans les requêtes

Le type INTERVAL devient vraiment cool quand tu le combines avec d’autres types temporels (DATE, TIMESTAMP). On va voir les opérations de base.

Ajouter un intervalle à une date/heure

Tu peux ajouter des intervalles à des valeurs de date ou d’heure. Par exemple :

SELECT CURRENT_DATE + INTERVAL '7 days' AS delivery_date;
-- On obtient la date dans 7 jours à partir d’aujourd’hui

Résultat :

delivery_date
2023-10-08

Soustraire des intervalles d’une date/heure

En plus d’ajouter, tu peux aussi soustraire des intervalles :

SELECT NOW() - INTERVAL '2 hours' AS two_hours_ago;
-- On obtient l’heure qu’il y a deux heures

Résultat :

two_hours_ago
2023-10-01 10:00:00.000

Calculer la différence entre deux dates

Une des fonctions puissantes de INTERVAL, c’est de calculer la différence entre deux dates :

SELECT '2023-10-15'::DATE - '2023-10-01'::DATE AS days_difference;
-- Combien de jours entre deux dates

Résultat :

days_difference
14 days

Fais gaffe, le résultat ici est aussi un intervalle de temps.

Exemples pratiques avec INTERVAL

Calcul de la date de livraison. Imagine une boutique en ligne où la livraison prend de 3 à 7 jours. Voilà comment tu peux calculer les dates de livraison possibles :

SELECT CURRENT_DATE + INTERVAL '3 days' AS earliest_delivery,
       CURRENT_DATE + INTERVAL '7 days' AS latest_delivery;

Résultat :

earliest_delivery latest_delivery
2023-10-04 2023-10-08

Prendre en compte la durée d’une tâche. Imaginons qu’on a une table tasks où chaque tâche a une date de début. On veut calculer la date de fin de la tâche en fonction de sa durée en heures :

CREATE TABLE tasks (
    task_id SERIAL PRIMARY KEY,
    task_name TEXT,
    start_time TIMESTAMP,
    duration INTERVAL
);

INSERT INTO tasks (task_name, start_time, duration)
VALUES
('Préparer le rapport', '2023-10-01 09:00:00', INTERVAL '4 hours'),
('Tester l’application', '2023-10-01 10:00:00', INTERVAL '2 hours 30 minutes');

SELECT task_name,
       start_time,
       start_time + duration AS end_time
FROM tasks;

Résultat :

task_name start_time end_time
Préparer le rapport 2023-10-01 09:00:00 2023-10-01 13:00:00
Tester l’application 2023-10-01 10:00:00 2023-10-01 12:30:00

Comparer les durées d’exécution. Parfois, tu veux trouver toutes les tâches qui ont pris moins de 3 heures :

SELECT task_name
FROM tasks
WHERE duration < INTERVAL '3 hours';

Résultat :

task_name
Tester l’application

Trucs utiles avec les intervalles

Calcul dynamique d’intervalles. Tu peux combiner les intervalles avec d’autres opérations. Par exemple, prendre le nombre de jours d’une colonne et le convertir en intervalle :

SELECT CURRENT_DATE + (order_days || ' days')::INTERVAL AS order_due_date
FROM orders;

Caster un intervalle en texte. Parfois, tu veux convertir un intervalle en texte pour l’afficher :

SELECT INTERVAL '2 days 3 hours'::TEXT AS interval_text;

Résultat :

interval_text
2 days 03:00:00

Erreurs fréquentes avec INTERVAL

Travailler avec INTERVAL, même si c’est puissant, peut parfois être galère. Une erreur classique — utiliser un mauvais format. Par exemple, si tu fais INTERVAL '2 hours and 30 minutes', tu vas avoir une erreur, parce que PostgreSQL pige pas le mot "and". La bonne façon : INTERVAL '2 hours 30 minutes'.

Une autre erreur — oublier de préciser l’unité de temps, genre INTERVAL '2'. PostgreSQL sait pas ce que c’est ce "2", donc indique toujours l’unité (2 days, 2 hours).

1
Étude/Quiz
Travailler avec les dates et l'heure, niveau 31, leçon 4
Indisponible
Travailler avec les dates et l'heure
Travailler avec les dates et l'heure
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION