У меня есть столбец со временем и столбцом с целым числом, представляющим минуты. Теперь я хочу добавить/вычесть минуты из столбца времени. Следующие работы но чувствуют себя странно (CURTIME здесь как колонка времени и 15 как int column):
SELECT ADDTIME(CURTIME(), CONCAT("00:" , 15, ":00")) AS foo FROM dual;
Как это можно улучшить?
Вы можете использовать INTERVAL
с CURTIME()
или CURRENT_TIME()
или аналогичными:
SELECT CURTIME() + INTERVAL 15 MINUTE
Как в:
mysql> SELECT CURTIME() + INTERVAL 15 MINUTE;
+--------------------------------+
| CURTIME() + INTERVAL 15 MINUTE |
+--------------------------------+
| 12:23:24 |
+--------------------------------+
1 row in set (0.01 sec)
mysql>
Для вашего случая, если ваше CURTIME()
является TIME
, а длительность - целым числом, тогда они должны просто сложить в порядке, например:
SELECT time_field + INTERVAL my_duration MINUTE
Если нет, вы можете использовать CAST()
чтобы получить типы, подходящие для добавления.
Арифметику даты также можно выполнить с помощью INTERVAL вместе с оператором + или:
date + INTERVAL expr unit date - INTERVAL expr unit
Модуль INTERVAL expr разрешен по обе стороны оператора +, если выражение на другой стороне является значением даты или даты и времени. Для оператора-оператора модуль INTERVAL expr разрешен только с правой стороны, поскольку нет смысла вычитать значение даты или даты и времени от интервала.
Ссылка: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html