2009-09-15 7 views
5

Esta pregunta se relaciona con this questionAdición de ciertos minutos para el tiempo en MySQL

tengo un campo que es un campo de tiempo (que no tiene por qué ser un campo de fecha y hora, hacer que la parte de fecha no tiene sentido aquí) . El valor que quiero agregar está en otro campo, en minutos.

De modo básico, quiero agregar minutos a un valor de tiempo. He probado la función DATE_ADD, pero espera que la fecha sea una fecha y hora con la fecha establecida. También probé la función ADDTIME, pero el problema aquí es que el campo de duración está en minutos enteros, y no en el formato hh: mm: ss, por lo que solo lo agrega como segundos.

¿Alguien sabe una manera de lograr esto?

[editar]

Ésta es la consulta actual:

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

y este es el resultado:

+-----------------------------------+-----------+----------+ 
| 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

Agregó un complemento en respuesta a su comentario. – Robban

Respuesta

19

AddTime es definitivamente el camino a seguir ... simplemente agregar una cierta cantidad de minutos podría hacer algo como:

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

Esto agregaría 10 minutos al primer valor.

Usted puede leer más en dev.mysql.com aquí: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_addtime

EDIT:

Además de su comentario. Si obtiene el valor para agregar en el formato mm y nada más, entonces puede analizar un valor de tiempo con la función SEC_TO_TIME(). De esta manera:

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

Esto volvería una vez en el formato hh:mm:ss minutos.

0

¿Quizás concatenar ': 00' al final del valor del campo de minutos antes de pasar al TIMEADD? O, como alternativa, multiplica el valor por 60.

+0

Ambos no funcionan. Con la versión concat, recibo tiempos como 39:00:00, 25:00:00. – Ikke

+0

¿Cómo lo logras, si los minutos que llegan son 00-59? o ¿tiene cosas como las 39:00 en su campo de minutos? – Amber

+0

Realmente no lo sé. Esto es justo lo que obtendré. Pero este método no sería muy flexible en caso de que tenga duraciones de más de 59 minutos. – Ikke

0

TL: DR

multiplican minutos en 100, no 60

EXPLICACIÓN

Si desea agregar minutos en MM formato, como lo es en su Por ejemplo, y evite convertirlo al formato HH:MM:SS, debe multiplicar los minutos por 100, no 60:

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

es porque como documentación de MySQL dice:

Por ejemplo, se podría pensar en '1112' y 1112 en el sentido de '11: 12: 00' (12 minutos después de las 11 en punto) , pero MySQL los interpreta como '00: 11: 12 '(11 minutos, 12 segundos). Del mismo modo, '12' y 12 se interpretan como '00: 00: 12'.

Así que no quieren contar el número de segundos que tiene (por ejemplo: 600 = 6 minutos, no 10 minutos como se pensaría)

Si desea añadir 15 o 30 minutos, simplemente agrega 1500 o 3000, y eso es todo.

0

Una forma sencilla de añadir & intervalos restar de fechas y horas es sólo para usar + o - y la palabra INTERVAL:

SELECT startTime + INTERVAL 10 MINUTE 

Puede añadir & quitar segundos, minutos, días, semanas, meses, etc .. la lista completa está aquí https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-add

Fecha aritmética también se puede realizar utilizando INTERVALO junto con el + o - del operador:

date + INTERVAL expr unit 
date - INTERVAL expr unit 

unidad expr INTERVAL se permite a cada lado del operador + si la expresión en el otro lado es un valor de fecha o de fecha y hora. Para el operador -, la unidad EXPR INTERVAL solo se permite en el lado derecho, ya que no tiene sentido para restar un valor de fecha o de fecha y hora de un intervalo.

Cuestiones relacionadas