Добавление определенных минут в 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, и все.