Перейти к содержимому
Последнее обновление

ADD_TIME

Описание​

Добавляет указанный временной интервал к выражению даты и времени или выражению времени. Если второй параметр отрицательный, это эквивалентно вычитанию интервала из первого параметра.

Синтаксис​

ADD_TIME(`<date_or_time_expr>`, `<time>`)

Параметры​

ПараметрОписание
<date_or_time_expr>Допустимое выражение даты. Поддерживаются входные значения типов TIMESTAMPTZ/TIMESTAMP_NS/DATETIME/DATE/TIME. Значение типа date преобразуется во время начала дня (00:00:00). Подробные сведения о форматах см. в разделах Преобразование timestamptz, Преобразование datetime и Преобразование time.
<time>Допустимое выражение времени, представляющее значение времени, которое нужно прибавить к <date_or_time_expr>. Отрицательное значение означает вычитание. Поддерживаются входные значения типа time.

Возвращаемое значение​

Для входного значения типа TIMESTAMP_NS возвращается значение типа TIMESTAMP_NS с фиксированной точностью дробной части секунды до девяти знаков. Результаты проверяются на соответствие диапазону возвращаемого типа; для TIMESTAMP_NS используется диапазон [1677-09-21 00:12:43.145224192, 2262-04-11 23:47:16.854775807].

Возвращает результат прибавления <time> к <date_or_time_expr>. Тип возвращаемого значения зависит от типа первого параметра:

  • Если первый параметр имеет тип timestamptz, возвращается значение типа timestamptz.
  • Если первый параметр имеет тип datetime, возвращается значение типа datetime.
  • Если первый параметр имеет тип time, возвращается значение типа time.

Особые случаи:

  • Если какой-либо входной параметр равен NULL, возвращается NULL.
  • Если первый параметр имеет тип time и результат выходит за пределы диапазона типа time, возвращается максимальное (или минимальное) значение времени.
  • Если первый параметр имеет тип datetime или timestamptz и результат выходит за пределы диапазона типа datetime, возникает ошибка.

Примеры​

-- Add time when the first parameter is datetime type
SELECT ADD_TIME('2025-09-19 12:00:00', '01:30:00');
+---------------------------------------------+
| ADD_TIME('2025-09-19 12:00:00', '01:30:00') |
+---------------------------------------------+
| 2025-09-19 13:30:00 |
+---------------------------------------------+

-- Add time when the first parameter is time type
SELECT ADD_TIME(cast('12:15:20' as time), '00:10:40');
+------------------------------------------------+
| ADD_TIME(cast('12:15:20' as time), '00:10:40') |
+------------------------------------------------+
| 12:26:00 |
+------------------------------------------------+

-- SET time_zone = '+08:00';
SELECT ADD_TIME('2025-10-10 11:22:33.1234567+03:00', '01:02:03');
+-----------------------------------------------------------+
| ADD_TIME('2025-10-10 11:22:33.1234567+03:00', '01:02:03') |
+-----------------------------------------------------------+
| 2025-10-10 17:24:36.123457+08:00 |
+-----------------------------------------------------------+

-- NULL parameter test
SELECT ADD_TIME(NULL, '01:00:00');
+----------------------------+
| ADD_TIME(NULL, '01:00:00') |
+----------------------------+
| NULL |
+----------------------------+

SELECT ADD_TIME('2025-09-19 12:00:00', NULL);
+---------------------------------------+
| ADD_TIME('2025-09-19 12:00:00', NULL) |
+---------------------------------------+
| NULL |
+---------------------------------------+

SELECT ADD_TIME(NULL, NULL);
+----------------------+
| ADD_TIME(NULL, NULL) |
+----------------------+
| NULL |
+----------------------+

-- Time type out-of-range test (returns max/min value)
SELECT ADD_TIME(cast('835:30:00' as time), '21:00:00');
+-------------------------------------------------+
| ADD_TIME(cast('835:30:00' as time), '21:00:00') |
+-------------------------------------------------+
| 838:59:59 |
+-------------------------------------------------+

SELECT ADD_TIME(cast('-832:30:00' as time), '-31:00:00');
+---------------------------------------------------+
| ADD_TIME(cast('-832:30:00' as time), '-31:00:00') |
+---------------------------------------------------+
| -838:59:59 |
+---------------------------------------------------+

-- Datetime type out-of-range test (throws error)
SELECT ADD_TIME('9999-12-31 23:59:59', '00:00:01');
ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.3)[INVALID_ARGUMENT]datetime value is out of range in function add_time

SELECT ADD_TIME('0000-01-01 00:00:00', '-00:00:01');
ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.3)[INVALID_ARGUMENT]datetime value is out of range in function add_time