Calculs sur les données temporelles
Il est fréquent de vouloir faire des calculs sur des données temporelles. Par exemple, pour calculer le nombre de jours ou d'heures
entre deux dates, pour ajouter une certaine durée à une donnée en cas de calcul d'échéance, etc.
Pour ce faire, on peut soit se lancer dans des calculs compliqués en convertissant des jours en heures, des heures en jours, des
minutes en secondes ; soit utiliser les fonctions SQL prévues à cet effet. Je vous laisse deviner quelle solution est la meilleure…
Nous allons donc voir dans ce chapitre comment :
calculer la différence entre deux données temporelles ;
ajouter un intervalle de temps à une donnée temporelle ;
convertir une donnée horaire en un nombre de secondes ;
et d'autres petites choses bien utiles.
Différence entre deux dates/heures
Trois fonctions permettent de calculer le temps écoulé entre deux données temporelles :
DATEDIFF() : qui donne un résultat en nombre de jours ;
TIMEDIFF() : qui donne un résultat sous forme de TIME ;
TIMESTAMPDIFF() : qui donne le résultat dans l'unité de temps souhaitée (heure, secondes, mois,…).
DATEDIFF()
DATEDIFF(date1, date2) peut s'utiliser avec des données de type DATE ou DATETIME (dans ce dernier cas, seule la
partie date est utilisée).
Les trois requêtes suivantes donnent donc le même résultat.
Code : SQL
SELECT DATEDIFF('2011-12-25','2011-11-10') AS nb_jours;
SELECT DATEDIFF('2011-12-25 22:12:18','2011-11-10 12:15:41') AS
nb_jours;
SELECT DATEDIFF('2011-12-25 22:12:18','2011-11-10') AS nb_jours;
nb_jours
45
TIMEDIFF()
La fonction TIMEDIFF(expr1, expr2) calcule la durée entre expr1 et expr2. Les deux arguments doivent être de même
type, soit TIME, soit DATETIME.
Code : SQL
-- Avec des DATETIME
SELECT '2011-10-08 12:35:45' AS datetime1, '2011-10-07 16:00:25' AS
datetime2, TIMEDIFF('2011-10-08 12:35:45', '2011-10-07 16:00:25') as
difference;
-- Avec des TIME
SELECT '12:35:45' AS time1, '00:00:25' AS time2,
TIMEDIFF('12:35:45', '00:00:25') as difference;
datetime1
datetime2
difference
2011-10-08 12:35:45 2011-10-07 16:00:25 20:35:20
Partie 4 : Fonctions : manipuler les dates
206/414
www.openclassrooms.com
Il est fréquent de vouloir faire des calculs sur des données temporelles. Par exemple, pour calculer le nombre de jours ou d'heures
entre deux dates, pour ajouter une certaine durée à une donnée en cas de calcul d'échéance, etc.
Pour ce faire, on peut soit se lancer dans des calculs compliqués en convertissant des jours en heures, des heures en jours, des
minutes en secondes ; soit utiliser les fonctions SQL prévues à cet effet. Je vous laisse deviner quelle solution est la meilleure…
Nous allons donc voir dans ce chapitre comment :
calculer la différence entre deux données temporelles ;
ajouter un intervalle de temps à une donnée temporelle ;
convertir une donnée horaire en un nombre de secondes ;
et d'autres petites choses bien utiles.
Différence entre deux dates/heures
Trois fonctions permettent de calculer le temps écoulé entre deux données temporelles :
DATEDIFF() : qui donne un résultat en nombre de jours ;
TIMEDIFF() : qui donne un résultat sous forme de TIME ;
TIMESTAMPDIFF() : qui donne le résultat dans l'unité de temps souhaitée (heure, secondes, mois,…).
DATEDIFF()
DATEDIFF(date1, date2) peut s'utiliser avec des données de type DATE ou DATETIME (dans ce dernier cas, seule la
partie date est utilisée).
Les trois requêtes suivantes donnent donc le même résultat.
Code : SQL
SELECT DATEDIFF('2011-12-25','2011-11-10') AS nb_jours;
SELECT DATEDIFF('2011-12-25 22:12:18','2011-11-10 12:15:41') AS
nb_jours;
SELECT DATEDIFF('2011-12-25 22:12:18','2011-11-10') AS nb_jours;
nb_jours
45
TIMEDIFF()
La fonction TIMEDIFF(expr1, expr2) calcule la durée entre expr1 et expr2. Les deux arguments doivent être de même
type, soit TIME, soit DATETIME.
Code : SQL
-- Avec des DATETIME
SELECT '2011-10-08 12:35:45' AS datetime1, '2011-10-07 16:00:25' AS
datetime2, TIMEDIFF('2011-10-08 12:35:45', '2011-10-07 16:00:25') as
difference;
-- Avec des TIME
SELECT '12:35:45' AS time1, '00:00:25' AS time2,
TIMEDIFF('12:35:45', '00:00:25') as difference;
datetime1
datetime2
difference
2011-10-08 12:35:45 2011-10-07 16:00:25 20:35:20
Partie 4 : Fonctions : manipuler les dates
206/414
www.openclassrooms.com
