En MySQL, le TIME
type is rather limited in range. En outre, de nombreuses fonctions temporelles n'acceptent pas les valeurs supérieures à 23:59:59
, ce qui les rend vraiment utilisables uniquement pour représenter le moment de la journée.
Compte tenu de vos besoins, votre meilleur pari est probablement écrire une fonction personnalisée qui imitent SEC_TO_TIME
mais permettant portée beaucoup plus grande:
CREATE FUNCTION SEC_TO_BIGTIME(sec INT)
RETURNS CHAR(10) DETERMINISTIC
BEGIN
SET @h = sec DIV 3600;
SET @m = sec DIV 60 MOD 60;
SET @s = sec MOD 60;
RETURN CONCAT(
LPAD(@h, 4, '0'),
':',
LPAD(@m, 2, '0'),
':',
LPAD(@s, 2, '0')
);
END;
Et voici comment l'utiliser:
create table tbl (dt time);
insert tbl values
('09:00:00'), ('01:00:00'), ('07:50:15'), ('12:00:00'),
('08:30:00'), ('00:45:00'), ('12:10:30');
select SEC_TO_BIGTIME(sum(time_to_sec(dt))) from tbl;
La production:
+--------------------------------------+
| SEC_TO_BIGTIME(SUM(TIME_TO_SEC(DT))) |
+--------------------------------------+
| 0051:15:45 |
+--------------------------------------+
Voir http://sqlfiddle.com/#!8/aaab8/1
Veuillez noter que le résultat est un CHAR(10)
afin de surmonter les limitations de type TIME
. Selon la manière dont vous envisagez d'utiliser ce résultat, cela signifie que vous devrez peut-être convertir cette chaîne dans le type approprié dans votre langue hôte.
Cette logique semble son. Pouvez-vous publier des données spécifiques qui semblent échouer? Et pouvez-vous clarifier la sortie? Cela ne semble pas être dans le bon format. – cmbuckley
Toutes les données de la table semblent correctes. Rien ne semble déranger ou causer un quelconque échec de ce que je peux dire. données de l'échantillon comprend: 09:00:00, 01:00:00, 07:50:00, 12:00:00, 08:30:00, 00:45:00, 12:10:00 - ces valeurs seules devrait être beaucoup plus élevé même que ce que je reçois. –