跳到主要内容
最后 更新

TIME_TO_SEC

描述

TIME_TO_SEC 函数用于将输入的时间值转换为总秒数。支持 TIMEDATETIMETIMESTAMP_NS;对于日期时间值,函数提取时间部分(HH:MM:SS)进行计算。

该函数与 mysql 中的 time_to_sec 函数.

语法

TIME_TO_SEC(<date_or_time_expr>)

参数

参数说明
<date_or_time_expr>必填。支持 TIMEDATETIMETIMESTAMP_NS;对于日期时间值,函数提取时间部分进行计算。

返回值

返回类型为 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 |
+--------+