跳到主要内容

TIME_TO_SEC

描述

TIME_TO_SEC 函数用于将输入的时间值转换为以秒为单位的总秒数。该函数支持处理 TIME、DATETIME 类型:若输入为 DATETIME 类型,会自动提取其中的时间部分(HH:MM:SS)进行计算;若输入为纯时间值,则直接转换为总秒数。

该函数与 mysql 中的 time_to_sec 函数.

语法

TIME_TO_SEC(<date_or_time_expr>)

参数

参数说明
<date_or_time_expr>必填,支持 TIME 或 DATETIME。如果输入为 DATETIME 类型,函数会提取时间部分进行计算。具体 datetime/time 请查看 datetime 的转换time 的转换

返回值

返回类型为 INT,表示输入时间值对应的总秒数,计算逻辑为:小时×3600 + 分钟×60 + 秒。

  • 输入 datetime 字符串时必须显示转换为 datetime 类型,不然会默认转换为 time 类型,返回 NULL.
  • 若输入为负数时间(如 -01:30:00),返回对应的负秒数(如 -5400);
  • 若输入为 NULL,返回 NULL;
  • 忽略微秒部分(如 12:34:56.789 仅按 12:34:56 计算)

举例

-- 纯时间类型
SELECT TIME_TO_SEC('16:32:18') AS result;
+--------+
| result |
+--------+
| 59538 |
+--------+

-- 处理 DATETIME 字符串,返回 NULL
SELECT TIME_TO_SEC('2025-01-01 16:32:18') AS result;
+--------+
| result |
+--------+
| NULL |
+--------+

-- datetime 字符串需要显示转换为 datetime 类型
SELECT TIME_TO_SEC(cast('2025-01-01 16:32:18' as datetime)) AS result;
+--------+
| result |
+--------+
| 59538 |
+--------+

-- 负数时间转换
SELECT TIME_TO_SEC('-02:30:00') AS result;
+--------+
| result |
+--------+
| -9000 |
+--------+

-- 负数时间带微秒(忽略微秒)
SELECT TIME_TO_SEC('-16:32:18.99') AS result;
+--------+
| result |
+--------+
| -59538 |
+--------+

-- 微秒处理(忽略微秒)
SELECT TIME_TO_SEC('10:15:30.123456') AS result;
+--------+
| result |
+--------+
| 36930 |
+--------+

-- 无效时间
SELECT TIME_TO_SEC('12:60:00') AS result;
+--------+
| result |
+--------+
| NULL |
+--------+

-- 超出 TIME 范围
SELECT TIME_TO_SEC('839:00:00') AS result;
+--------+
| result |
+--------+
| NULL |
+--------+

-- 参数为 NULL
SELECT TIME_TO_SEC(NULL) AS result;
+--------+
| result |
+--------+
| NULL |
+--------+