Dans le langage SQL, la fonction SEC_TO_TIME() permet d’afficher des secondes dans un format : “HH:MM:SS” (heures, minutes et secondes). La fonction converti le nombre de seconde en nombre d’heures, de minutes et de secondes pour être plus compréhensible pour un humain.
La fonction est particulièrement utile pour afficher proprement la différence entre 2 timestamps. Elle est également utile pour ré-afficher au bon format des heures qui auraient été additionnées après avoir été converti en nombre de secondes à l’aide de la fonction TIME_TO_SEC().
Compatibilité : MySQL, Oracle et MariaDB.
Attention : le résultat est limité de -838:59:59 à 838:59:59 (3.020.399 secondes). Au delà, il faut trouver une autre solution, par exemple en retournant le résultat en secondes et en convertissant sous ce format avec un autre langage de programmation.
Syntaxe
La fonction s’utilise dans une requête SQL, en utilisant la syntaxe suivante :
SELECT SEC_TO_TIME( secondes );
Dans cette requête, le paramètre “secondes” correspond au nombre de secondes à convertir. Le résultat sera affiché au format “HH:MM:SS”. Si le résultat dépasse les 99 heures, le format peut être “HHH:MM:SS”.
Exemple
Exemples basiques
La fonction peut s’utiliser avec des nombres positifs ou négatifs. Lorsque la limite est dépassée, ce sera toujours le seuil de 838:59:59 qui sera affiché.
SELECT SEC_TO_TIME(1); -- retourne : 00:00:01 SELECT SEC_TO_TIME(60); -- retourne : 00:01:00 SELECT SEC_TO_TIME(3600); -- retourne : 01:00:00 SELECT SEC_TO_TIME(86398); -- retourne : 23:59:58 SELECT SEC_TO_TIME(86399); -- retourne : 23:59:59 SELECT SEC_TO_TIME(86400); -- retourne : 24:00:00 SELECT SEC_TO_TIME(86401); -- retourne : 24:00:01 SELECT SEC_TO_TIME(3020398); -- retourne : 838:59:58 SELECT SEC_TO_TIME(3020399); -- retourne : 838:59:59 SELECT SEC_TO_TIME(3020400); -- retourne : 838:59:59 SELECT SEC_TO_TIME(999999999); -- retourne : 838:59:59 SELECT SEC_TO_TIME(0); -- retourne : 00:00:00 SELECT SEC_TO_TIME(-60); -- retourne : -00:01:00 SELECT SEC_TO_TIME(-3600); -- retourne : -01:00:00 SELECT SEC_TO_TIME(-86400); -- retourne : -24:00:00 SELECT SEC_TO_TIME(-3020398); -- retourne : -838:59:58 SELECT SEC_TO_TIME(-3020399); -- retourne : -838:59:59 SELECT SEC_TO_TIME(-3020400); -- retourne : -838:59:59 SELECT SEC_TO_TIME(-999999999); -- retourne : -838:59:59
Différence de timestamp
Imaginons une table qui contient des articles. La table contient 2 colonnes avec des timestamps, l’un qui correspond au timestamp (date) de la création de l’article et l’autre le timestamp (date) de la publication de l’article.
Table “article” :
id | date_creation | date_publication |
---|---|---|
1 | 1409991252 | 1410158391 |
2 | 1410276087 | 1410277743 |
3 | 1410348806 | 1410350209 |
4 | 1410425669 | 1410445892 |
Il est possible de déterminer la différence entre la date de création et la date de publication en effectuant une soustraction. Ce résultat peut être formaté avec la fonction SEC_TO_TIME() en utilisant une requête similaire à celle-ci :
SELECT id, date_creation, date_publication, ( date_publication - date_creation ) AS diff, SEC_TO_TIME( date_publication - date_creation ) AS diff_hhmmss FROM article
Résultat :
id | date_creation | date_publication | diff | diff_hhmmss |
---|---|---|---|---|
1 | 1409991252 | 1410158391 | 167139 | 46:25:39 |
2 | 1410276087 | 1410277743 | 1656 | 00:27:36 |
3 | 1410348806 | 1410350209 | 1403 | 00:23:23 |
4 | 1410425669 | 1410445892 | 20223 | 05:37:03 |
Sommes de plusieurs heures
Imaginons une table “project” qui contient une liste de projet avec le temps passé pour chacun des projets.
Table “project” :
id | project | temps |
---|---|---|
1 | projet umbrella | 00:43:31 |
2 | ABC project | 03:14:09 |
3 | 1001 projets | 147:46:41 |
4 | alpha-beta | 34:26:02 |
Pour obtenir la somme des heures passées pour chacun de ces projets et ainsi avoir une vision globale, il est possible d’utiliser la requête SQL suivante :
SELECT SEC_TO_TIME( SUM( TIME_TO_SEC(temps) ) ) FROM project
Résultat :
186:10:23
La requête permet d’obtenir un résultat total de 186 heures, 10 minutes et 23 secondes.
Attention, il ne faut pas oublier la limite de 838 heures, 59 minutes et 59 secondes. Au delà, les données risque d’être faussées.