Les fonctions de date et heure en MySQL
En SQL, les dates sont parfois complexes pour les débutants, car lors de l'utilisation d'une base de données, le format de la date dans la table doit correspondre à la date d'entrée pour pouvoir l'insérer correctement.
Dans divers scénarios, au lieu de DATE, on utilise DATETIME (l'heure est également incluse avec la date).
Dans ce cours, nous allons présenter différentes fonctions de date par défaut dans MySQL.
Table échantillon - Conges
+------+------------+------------+-------------------+-----+
| Id_c | Date_debut | Date_fin | Raison | Emp |
+------+------------+------------+-------------------+-----+
| 1 | 2019-02-01 | 2019-02-15 | Voyage | 1 |
| 2 | 2019-05-20 | 2019-06-03 | Maladie d'enfant | 3 |
| 3 | 2019-09-01 | 2019-09-15 | Rentrée scolaire | 4 |
| 4 | 2019-09-24 | 2019-09-29 | Voyage | 2 |
| 5 | 2019-09-19 | 2019-09-24 | Soutenance | 5 |
+------+------------+------------+-------------------+-----+1. Fonction NOW()
La fonction NOW() renvoie la date et l'heure actuelles sous forme de valeur au format 'AAAA-MM-JJ HH:MM:SS' ou YYYYMMDDHHMMSS, selon que la fonction est utilisée dans un contexte de chaîne ou numérique.
La valeur est exprimée dans le fuseau horaire actuel.
Exemple n°1
SELECT NOW();+---------------------+ | NOW() | +---------------------+ | 2019-09-24 13:48:18 | +---------------------+
2. Fonction CURDATE()
La fonction CURDATE() renvoie la date actuelle sous forme de valeur au format 'AAAA-MM-JJ' ou AAAAMMJJ, selon que la fonction est utilisée dans un contexte de chaîne ou numérique.
Exemple n°2
SELECT CURDATE();+------------+ | CURDATE() | +------------+ | 2019-09-24 | +------------+
3. Fonction CURTIME()
La fonction CURTIME() renvoie l'heure actuelle sous forme de valeur au format 'HH:MM:SS' ou HHMMSS, selon que la fonction est utilisée dans un contexte de chaîne ou numérique.
La valeur est exprimée dans le fuseau horaire actuel.
Exemple n°3
SELECT CURTIME();+-----------+ | CURTIME() | +-----------+ | 13:59:00 | +-----------+
4. Fonction DATE()
La fonction DATE() extrait la partie date d'une expression DATETIME.
Exemple n°4
SELECT DATE('2019-09-24 13:59:03');+-----------------------------+
| DATE('2019-09-24 13:59:03') |
+-----------------------------+
| 2019-09-24 |
+-----------------------------+Exemple n°5
SELECT DATE(Date_debut) FROM Conges;+------------------+ | DATE(Date_debut) | +------------------+ | 2019-02-01 | | 2019-05-20 | | 2019-09-01 | | 2019-09-24 | | 2019-09-19 | +------------------+
5. Fonction EXTRACT()
La fonction EXTRACT(unit FROM date) renvoie une seule partie d'une date/heure.
Plusieurs unités peuvent être utilisées, notamment : MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR, etc.
Exemple n°6
SELECT EXTRACT(DAY FROM Date_debut) as "Jour",
EXTRACT(MONTH FROM Date_debut) as "Mois",
EXTRACT(YEAR FROM Date_debut) as "Année"
FROM Conges;+------+------+--------+ | Jour | Mois | Année | +------+------+--------+ | 1 | 2 | 2019 | | 20 | 5 | 2019 | | 1 | 9 | 2019 | | 24 | 9 | 2019 | | 19 | 9 | 2019 | +------+------+--------+
6. Fonction DATE_ADD()
La fonction DATE_ADD(date, INTERVAL expr type) ajoute un intervalle de temps spécifié à une date.
Les types possibles incluent : MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR, etc.
Exemple n°7
SELECT DATE_ADD(Date_debut, INTERVAL 1 YEAR) FROM Conges;+---------------------------------------+ | DATE_ADD(Date_debut, INTERVAL 1 YEAR) | +---------------------------------------+ | 2020-02-01 | | 2020-05-20 | | 2020-09-01 | | 2020-09-24 | | 2020-09-19 | +---------------------------------------+
Exemple n°8
SELECT DATE_ADD(Date_debut, INTERVAL 3 MONTH) FROM Conges;+----------------------------------------+ | DATE_ADD(Date_debut, INTERVAL 3 MONTH) | +----------------------------------------+ | 2019-05-01 | | 2019-08-20 | | 2019-12-01 | | 2019-12-24 | | 2019-12-19 | +----------------------------------------+
7. Fonction DATE_SUB()
La fonction DATE_SUB(date, INTERVAL expr type) soustrait un intervalle de temps spécifié à une date.
Exemple n°9
SELECT DATE_SUB(Date_debut, INTERVAL 3 MONTH) FROM Conges;+----------------------------------------+ | DATE_SUB(Date_debut, INTERVAL 3 MONTH) | +----------------------------------------+ | 2018-11-01 | | 2019-02-20 | | 2019-06-01 | | 2019-06-24 | | 2019-06-19 | +----------------------------------------+
8. Fonction DATEDIFF()
La fonction DATEDIFF(date1, date2) renvoie date1 - date2 sous forme de valeur en jours.
Seules les parties date des valeurs sont utilisées dans le calcul (l'heure est ignorée).
Exemple n°10
SELECT DATEDIFF(NOW(), Date_debut) AS "Nombre jours passés" FROM Conges;+----------------------+ | Nombre jours passés | +----------------------+ | 235 | | 127 | | 23 | | 0 | | 5 | +----------------------+
9. Fonctions YEAR(), MONTH() et DAY()
Ces fonctions sont utilisées pour extraire respectivement l'année, le mois et le jour d'une date.
Exemple n°11
SELECT YEAR(Date_debut), MONTH(Date_debut), DAY(Date_debut) FROM Conges;+------------------+-------------------+-----------------+ | YEAR(Date_debut) | MONTH(Date_debut) | DAY(Date_debut) | +------------------+-------------------+-----------------+ | 2019 | 2 | 1 | | 2019 | 5 | 20 | | 2019 | 9 | 1 | | 2019 | 9 | 24 | | 2019 | 9 | 19 | +------------------+-------------------+-----------------+
Récapitulatif des fonctions
| Fonction | Description | Exemple de résultat |
|---|---|---|
| NOW() | Date et heure actuelles | 2019-09-24 13:48:18 |
| CURDATE() | Date actuelle | 2019-09-24 |
| CURTIME() | Heure actuelle | 13:59:00 |
| DATE() | Extrait la partie date d'un DATETIME | 2019-09-24 |
| EXTRACT() | Extrait une unité spécifique (jour, mois, année, etc.) | 24, 9, 2019 |
| DATE_ADD() | Ajoute un intervalle à une date | 2020-09-24 |
| DATE_SUB() | Soustrait un intervalle d'une date | 2018-11-01 |
| DATEDIFF() | Différence en jours entre deux dates | 235 |
| YEAR() | Extrait l'année | 2019 |
| MONTH() | Extrait le mois | 9 |
| DAY() | Extrait le jour | 24 |
Requêtes sur la table Conges
En utilisant la table Conges présentée plus haut, écrivez les requêtes SQL pour :
- Afficher le jour, le mois et l'année de chaque date de début.
- Afficher la date de début, la date de fin et le nombre de jours de chaque congé.
- Afficher les dates de début qui tombent en septembre 2019.
- Afficher les dates de début après ajout de 7 jours.
- Jour, mois, année :
SELECT DAY(Date_debut), MONTH(Date_debut), YEAR(Date_debut) FROM Conges; - Nombre de jours de chaque congé :
SELECT Date_debut, Date_fin, DATEDIFF(Date_fin, Date_debut) AS "Durée (jours)" FROM Conges; - Dates de début en septembre 2019 :
SELECT Date_debut FROM Conges WHERE YEAR(Date_debut) = 2019 AND MONTH(Date_debut) = 9;Ou avec EXTRACT :
SELECT Date_debut FROM Conges WHERE EXTRACT(YEAR FROM Date_debut) = 2019 AND EXTRACT(MONTH FROM Date_debut) = 9; - Dates après ajout de 7 jours :
SELECT Date_debut, DATE_ADD(Date_debut, INTERVAL 7 DAY) AS "Date_debut + 7 jours" FROM Conges;
- Les fonctions de date en MySQL permettent de manipuler facilement les dates et heures.
- NOW(), CURDATE() et CURTIME() donnent la date/heure actuelle.
- DATE() extrait la partie date d'un DATETIME.
- EXTRACT() permet d'extraire une partie spécifique (jour, mois, année, heure, etc.).
- DATE_ADD() et DATE_SUB() permettent d'ajouter ou soustraire des intervalles.
- DATEDIFF() calcule la différence en jours entre deux dates.
- YEAR(), MONTH() et DAY() sont des raccourcis pour EXTRACT().
- Les intervalles peuvent être de différents types : DAY, MONTH, YEAR, HOUR, MINUTE, SECOND, etc.
- Toujours vérifier le format des dates lors des insertions pour éviter les erreurs.
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.