SQL - Date & Time: Guide Complet pour Débutants

Salut à toi, futur mage des bases de données ! Aujourd'hui, nous plongeons dans le monde fascinant des dates et des heures en SQL. En tant que ton enseignant de quartier en informatique, je suis là pour te guider dans ce voyage avec plein d'exemples et d'explications. Alors, prends ta machine à temps virtuelle et c'est parti !

SQL - Date & Time

Types de Données Date & Time en SQL

Avant de commencer à manipuler les dates et les heures, nous devons comprendre comment SQL stocke ces informations. Pense à ces types de données comme des conteneurs spéciaux conçus spécifiquement pour les données temporelles.

DATE

Le type de données DATE stocke une date au format YYYY-MM-DD.

CREATE TABLE events (
event_id INT PRIMARY KEY,
event_name VARCHAR(100),
event_date DATE
);

INSERT INTO events (event_id, event_name, event_date)
VALUES (1, 'Pique-nique d'entreprise', '2023-07-15');

Dans cet exemple, nous créons une table events et ajoutons un pique-nique d'entreprise prévu pour le 15 juillet 2023. Le type de données DATE nous assure que nous stockons uniquement la date, sans aucune information sur l'heure.

TIME

Le type de données TIME stocke l'heure au format HH:MI:SS.

CREATE TABLE class_schedule (
class_id INT PRIMARY KEY,
class_name VARCHAR(100),
start_time TIME
);

INSERT INTO class_schedule (class_id, class_name, start_time)
VALUES (1, 'Introduction à SQL', '09:30:00');

Ici, nous créons un planning de cours et ajoutons un cours de SQL qui commence à 9:30 AM. Le type de données TIME nous permet de stocker cette heure précisément.

DATETIME

Le type de données DATETIME combine la date et l'heure, généralement au format YYYY-MM-DD HH:MI:SS.

CREATE TABLE appointments (
appointment_id INT PRIMARY KEY,
patient_name VARCHAR(100),
appointment_datetime DATETIME
);

INSERT INTO appointments (appointment_id, patient_name, appointment_datetime)
VALUES (1, 'John Doe', '2023-06-20 14:30:00');

Dans cet exemple, nous programmisons un rendez-vous médical pour John Doe le 20 juin 2023 à 14h30. Le type de données DATETIME nous permet de stocker à la fois la date et l'heure dans une seule colonne.

TIMESTAMP

Le type de données TIMESTAMP est similaire à DATETIME, mais il est souvent utilisé pour suivre lorsque un enregistrement a été modifié pour la dernière fois.

CREATE TABLE blog_posts (
post_id INT PRIMARY KEY,
title VARCHAR(200),
content TEXT,
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

INSERT INTO blog_posts (post_id, title, content)
VALUES (1, 'Mon Premier Article de Blog', 'Bonjour, le monde !');

Dans cet exemple, la colonne last_updated sera automatiquement définie sur la date et l'heure actuelles lors de l'insertion ou de la mise à jour d'un enregistrement.

Fonctions Date & Time en SQL

Maintenant que nous savons comment stocker les dates et les heures, explorons certaines des fonctions magiques que SQL offre pour manipuler ces données. J'aime penser à ces fonctions comme des outils de voyage dans le temps dans notre boîte à outils SQL !

Date et Heure Actuelle

Commençons par les bases - obtenir la date et l'heure actuelle.

SELECT CURRENT_DATE() AS aujourd'hui,
CURRENT_TIME() AS heure_actuelle,
NOW() AS datetime_actuel;

Cette requête vous donnera la date actuelle, l'heure actuelle et le datetime actuel. C'est comme demander à SQL "Quelle heure est-il ?" Pratique, n'est-ce pas ?

Extraction de Parties d'une Date

Parfois, nous n'avons besoin que de certaines parties d'une date. SQL a des fonctions pour cela aussi !

SELECT YEAR('2023-06-20') AS année,
MONTH('2023-06-20') AS mois,
DAY('2023-06-20') AS jour,
WEEKDAY('2023-06-20') AS jour_de_la_semaine;

Cette requête extrait l'année, le mois, le jour et le jour de la semaine de la date donnée. C'est comme disséquer une date pour obtenir l'information dont nous avons besoin.

Arithmetic sur les Dates

SQL nous permet de réaliser des opérations arithmétiques sur les dates. Cela est particulièrement utile pour calculer des durées ou trouver des dates futures/passées.

SELECT DATE_ADD('2023-06-20', INTERVAL 7 DAY) AS une_semaine_plus_tard,
DATE_SUB('2023-06-20', INTERVAL 1 MOIS) AS un_mois_plus_tard,
DATEDIFF('2023-12-31', '2023-06-20') AS jours_jusqu'à_la_nouvelle_annee;

Dans cet exemple, nous ajoutons 7 jours à une date, soustrayons 1 mois d'une date, et calculons le nombre de jours entre deux dates. C'est comme avoir une machine à temps à nos doigts !

Formatage des Dates

Parfois, nous devons présenter les dates dans un format spécifique. La fonction DATE_FORMAT vient à notre secours.

SELECT DATE_FORMAT('2023-06-20', '%W, %M %d, %Y') AS date_formatée,
DATE_FORMAT('2023-06-20 14:30:00', '%h:%i %p') AS heure_formatée;

Cette requête formate la date comme "Tuesday, June 20, 2023" et l'heure comme "02:30 PM". C'est comme habiller nos dates pour une occasion chic !

Voici un tableau des spécificateurs de format couramment utilisés :

Spécificateur Description Exemple
%Y Année à 4 chiffres 2023
%y Année à 2 chiffres 23
%M Nom du mois January
%m Mois (01-12) 01
%d Jour du mois (01-31) 01
%W Nom du jour de la semaine Monday
%w Jour de la semaine (0-6, 0 est dimanche) 1
%H Heure (00-23) 13
%h Heure (01-12) 01
%i Minutes (00-59) 30
%s Secondes (00-59) 45
%p AM ou PM PM

Mettre Tout Ensemble

Terminons par un exemple plus complexe qui combine plusieurs concepts :

CREATE TABLE user_logins (
login_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
login_time DATETIME DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO user_logins (user_id) VALUES (1), (2), (3);

SELECT
user_id,
login_time,
DATE_FORMAT(login_time, '%W, %M %d, %Y at %h:%i %p') AS formatted_login_time,
CASE
WHEN WEEKDAY(login_time) IN (5, 6) THEN 'Weekend Login'
ELSE 'Weekday Login'
END AS login_type,
TIMESTAMPDIFF(HOUR, login_time, NOW()) AS hours_since_login
FROM user_logins
WHERE login_time > DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK);

Cet exemple crée une table user_logins, insère des données, puis les interroge avec diverses manipulations de date et d'heure. Nous formatons l'heure de connexion, déterminons si c'était un week-end ou un jour ouvrable, et calculons combien d'heures se sont écoulées depuis la connexion.

Et voilà, les amis ! Nous avons voyagé dans le temps avec SQL, en apprenant sur les types de données et les fonctions date et heure. Souviens-toi, la pratique rend parfait, alors n'ayez pas peur d'expérimenter avec ces concepts. Avant de savoir, vous serez capable de plier le temps à votre guise... dans vos bases de données, du moins !

Credits: Image by storyset