Добавление определенных минут в MySQL

этот вопрос связан с этот вопрос

у меня есть поле, которое является полем времени (оно не должно быть полем datetime, потому что часть даты здесь не имеет смысла). Значение, которое я хочу добавить, находится в другом поле, в минутах.

таким образом, я хочу добавить минуты к значению времени. Я пробовал функцию DATE_ADD, но она ожидает, что дата будет datetime с набором datepart. Я также попробовал функцию ADDTIME, но проблема здесь в том, что поле duration находится в целых минутах, а не в формате hh:mm:ss, поэтому оно просто добавляет его как секунды.

кто-нибудь знает способ сделать это?

[edit]

это текущий запрос:

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

и вот результат:

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

4 ответов


Addtime, безусловно,путь... чтобы просто добавить определенное количество минут, вы можете сделать что-то вроде:

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

это добавит 10 минут к первому значению.

вы можете прочитать больше на dev.mysql.com здесь: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_addtime

EDIT:

В дополнение к вашему комментарию. Если вы получите значение для добавления в формате mm и ничего другого, тогда вы можете проанализировать значение времени с помощью . Вот так:

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

это вернуло бы время в hh:mm:ss минуту формат.


простой способ добавления и вычитания интервалов от даты и времени просто использовать + или - и слово INTERVAL:

SELECT startTime + INTERVAL 10 MINUTE

вы можете добавлять и вычитать секунды, минуты, дни, недели, месяцы и т. д.. Полный список здесь https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-add

арифметику даты также можно выполнить используя интервал вместе с + или - оператор:

date + INTERVAL expr unit 
date - INTERVAL expr unit 

интервал expr блок допускается по обе стороны оператора+, если выражение на другая сторона-значение даты или даты и времени. Для оператора -, интервал блок expr позволен только на правильной стороне, потому что он не делает никакое смысл вычитать значение даты или datetime из интервала.


возможно, объедините ': 00' в конец значения из поля минут перед переходом в TIMEADD? Или, в качестве альтернативы, умножьте значение на 60.


TL: DR

умножьте минуты на 100, а не на 60

объяснение

Если вы хотите добавить минут в MM формат, как в вашем примере, и избегайте его преобразования в HH:MM:SS формат, вы должны умножить минуты на 100, а не на 60:

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

это потому, что, как говорит документация MySQL:

например, вы можете подумать о "1112" и 1112 как означающих "11: 12: 00" (12 минут после 11 часов), но MySQL интерпретирует их как '00:11:12' (11 минут, 12 секунд). Аналогично, " 12 " и " 12 "интерпретируются как" 00:00:12".

таким образом, вы не хотите считать, сколько секунд у вас есть (например: 600 = 6 минут, а не 10 минут, как вы думаете)

Если вы хотите добавить 15 или 30 минут, вы просто добавляете 1500 или 3000, и все.