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

TIME_TO_SEC

Описание​

Функция TIME_TO_SEC преобразует входное значение времени в общее количество секунд. Функция поддерживает типы TIME и DATETIME: если входное значение имеет тип DATETIME, она автоматически извлекает временную часть (HH:MM:SS) для расчёта; если входное значение содержит только время, она напрямую преобразует его в общее количество секунд.

Поведение этой функции соответствует поведению функции time_to_sec в MySQL.

Синтаксис​

TIME_TO_SEC(<date_or_time_expr>)

Параметры​

ПараметрОписание
<date_or_time_expr>Обязательный параметр. Поддерживаются TIME и DATETIME. Если входное значение имеет тип DATETIME, функция извлекает временную часть для расчёта. Подробнее о допустимых форматах даты и времени см. в разделах Преобразование даты и времени и Преобразование даты

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

Возвращает значение типа INT, представляющее общее количество секунд, соответствующее входному значению времени. Расчёт выполняется по формуле: часы×3600 + минуты×60 + секунды.

  • При передаче строки с датой и временем её необходимо явно преобразовать в тип даты и времени; в противном случае она по умолчанию будет преобразована в тип времени и функция вернёт NULL.
  • Если входное значение времени отрицательное (например, -01:30:00), возвращает соответствующее отрицательное количество секунд (например, -5400)
  • Если входное значение равно NULL, возвращает NULL
  • Микросекундная часть игнорируется (например, 12:34:56.789 учитывается только как 12:34:56)

Примеры​

-- Pure time type
SELECT TIME_TO_SEC('16:32:18') AS result;
+--------+
| result |
+--------+
| 59538 |
+--------+

-- Process the DATETIME string and return NULL.
SELECT TIME_TO_SEC('2025-01-01 16:32:18') AS result;
+--------+
| result |
+--------+
| NULL |
+--------+

-- A datetime string needs to be explicitly converted to a datetime type.
SELECT TIME_TO_SEC(cast('2025-01-01 16:32:18' as datetime)) AS result;
+--------+
| result |
+--------+
| 59538 |
+--------+

-- Negative time conversion
SELECT TIME_TO_SEC('-02:30:00') AS result;
+--------+
| result |
+--------+
| -9000 |
+--------+

-- Negative time with microseconds (ignore microseconds)
SELECT TIME_TO_SEC('-16:32:18.99') AS result;
+--------+
| result |
+--------+
| -59538 |
+--------+

-- Microsecond processing (ignore microseconds)
SELECT TIME_TO_SEC('10:15:30.123456') AS result;
+--------+
| result |
+--------+
| 36930 |
+--------+

-- Invalid time
SELECT TIME_TO_SEC('12:60:00') AS result;
+--------+
| result |
+--------+
| NULL |
+--------+

-- Exceeds TIME range
SELECT TIME_TO_SEC('839:00:00') AS result;
+--------+
| result |
+--------+
| NULL |
+--------+

-- Parameter is NULL
SELECT TIME_TO_SEC(NULL) AS result;
+--------+
| result |
+--------+
| NULL |
+--------+