2009-09-15 10 views
5

Cette question est liée à this questionAjout de certaines minutes en temps dans MySQL

j'avoir un champ qui est un champ de temps (il n'a pas besoin d'être un champ datetime, provoque la partie date n'a pas de sens ici) . La valeur que je veux ajouter est dans un autre champ, en minutes.

Donc, fondamentalement, je veux ajouter des minutes à une valeur de temps. J'ai essayé la fonction DATE_ADD, mais il s'attend à ce que la date soit une date-heure, avec l'ensemble de datepart. J'ai également essayé la fonction ADDTIME, mais le problème ici est que le champ de durée est en minutes entières, et pas au format hh: mm: ss, ainsi il l'ajoute juste en tant que secondes.

Est-ce que quelqu'un connaît un moyen d'accomplir cela?

[modifier]

Ceci est la requête en cours:

SELECT ADDTIME(startTime, duration * 60), startTime, duration FROM tblAppointment 
JOIN tblThreatment ON tblThreatment.threatmentid = tblAppointment.threatment_id; 

et voici le résultat:

+-----------------------------------+-----------+----------+ 
| ADDTIME(startTime, duration * 60) | startTime | duration | 
+-----------------------------------+-----------+----------+ 
| 09:18:00       | 09:00:00 |  30 | 
| 10:09:00       | 10:00:00 |  15 | 
| 09:09:00       | 09:00:00 |  15 | 
| 10:57:00       | 10:30:00 |  45 | 
+-----------------------------------+-----------+----------+ 
+0

Ajout d'un ajout en réponse à votre commentaire. – Robban

Répondre

19

AddTime est certainement la voie à suivre ... juste ajouter un certain nombre de minutes, vous pouvez faire quelque chose comme:

AddTime('00:00:00', '00:10:00') 

Cela ajouterait 10 minutes à la première valeur.

Vous pouvez en savoir plus sur dev.mysql.com ici: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_addtime

EDIT:

En plus de votre commentaire. Si vous obtenez la valeur à ajouter dans le format mm et rien d'autre, vous pouvez analyser une valeur de temps avec la fonction SEC_TO_TIME(). Comme ceci:

SELECT ADDTIME(startTime, SEC_TO_TIME(duration*60)), startTime, duration 
FROM tblAppointment 
JOIN tblThreatment ON tblThreatment.threatmentid = tblAppointment.threatment_id; 

Cela reviendrait une fois dans le format hh:mm:ss minutes.

0

Peut-être concaténer ': 00' à la fin de la valeur du champ minutes avant de passer à TIMEADD? Ou bien, multipliez la valeur par 60.

+0

Les deux ne fonctionnent pas. Avec la version concat, j'ai des temps comme 39:00:00, 25:00:00. – Ikke

+0

Comment gérez-vous cela, si les minutes qui arrivent sont 00-59? ou avez-vous des choses comme 39:00 dans votre champ de minutes? – Amber

+0

Je ne sais vraiment pas. C'est juste ce que je reçois. Mais cette méthode ne serait pas très flexible dans le cas où vous avez des durées de plus de 59 minutes. – Ikke

0

TL: DR

minutes multiplier par 100, et non 60

EXPLICATION

Si vous voulez ajouter des minutes au format MM, comme il est dans votre Par exemple, et évitez de le convertir au format HH:MM:SS, vous devez multiplier les minutes par 100, et non 60:

SELECT ADDTIME(startTime, duration * 100), startTime, duration FROM tblAppointment 
JOIN tblThreatment ON tblThreatment.threatmentid = tblAppointment.threatment_id; 

Il est parce que la documentation MySQL dit:

Par exemple, vous pourriez penser à '1112' et 1112 en ce sens '11: 12: 00' (12 minutes après 11 heures) , mais MySQL les interprète comme '00: 11: 12 '(11 minutes, 12 secondes). De même, '12' et 12 sont interprétés comme '00: 00: 12'.

Vous ne voulez pas compter combien de secondes vous avez (ex: 600 = 6 minutes, pas 10 minutes que vous le pensez)

Si vous souhaitez ajouter 15 ou 30 minutes, vous ajoutez simplement 1500 ou 3000, et c'est tout.

0

Une façon simple d'ajouter & intervalles de Soustraire de dates et heures est juste d'utiliser + ou - et le mot INTERVAL:

SELECT startTime + INTERVAL 10 MINUTE 

Vous pouvez ajouter & secondes Soustraire, minutes, jours, semaines, mois, etc .. la liste complète est ici https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-add

date de l'arithmétique peut également être effectuée en utilisant INTERVALLE avec le + ou - opérateur:

date + INTERVAL expr unit 
date - INTERVAL expr unit 

INTERVAL unité de expr est permise de chaque côté de l'opérateur + si l'expression de la autre côté est une valeur de date ou date-heure. Pour l'opérateur -, l'unité d'expression INTERVAL est autorisée uniquement du côté droit, car elle ne permet pas de soustraire une date ou une valeur datetime d'un intervalle.

Questions connexes