Проблема в том, что ADDDATE
требует полной даты и времени в качестве параметра, в противном случае нет контекста для добавления. Передача только значения строки / времени 01:23:45
в качестве первого параметра выдает предупреждение («усеченное неверное значение даты-времени») и усекает его до NULL. Что произойдет, если у вас есть время '23: 59: 59 'и вы попытаетесь добавить время к нему? Это может перевернуться, но каков контекст сейчас? Вы получили день? Сбрасывается ли он на ноль? В таком расчете слишком много неопределенности.
Во всяком случае, похоже, нет функции, которая будет производить то, что вы хотите. Я думаю, что самое близкое, на что вы смотрите - это SEC_TO_TIME и TIME_TO_SEC . Вы можете сделать что-то вроде этого:
SELECT SEC_TO_TIME(TIME_TO_SEC('23:30:00') + 60);
-- returns 23:31:00
Однако, если вы столкнетесь с сценарием опрокидывания, вы получите время, превышающее 24-часовые часы:
SELECT SEC_TO_TIME(TIME_TO_SEC('23:59:30') + 60);
-- returns 24:00:30
Вы, вероятно, могли бы скорректировать это с помощью ролловера, вычтя 86400 из результата SEC_TO_TIME, если он был> 86400. Примерно так:
SELECT IF(
TIME_TO_SEC('23:54:30') + 60 > 86400,
SEC_TO_TIME(TIME_TO_SEC('23:54:30') + 60 - 86400),
SEC_TO_TIME(TIME_TO_SEC('23:54:30') + 60)
);