Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


TIMESTAMPDIFF

📄字数 998
👁️阅读量 加载中...

功能描述

计算两个日期或日期时间值之间的差异,并返回指定时间单位的差值。

语法格式

sql
TIMESTAMPDIFF(unit, expr1, expr2)

输入参数

  • unit:时间间隔单位,INTEGER 类型,或能隐式转换为 INTEGER 类型的其他类型。
  • expr1:日期时间值,DATEDATETIMEDATETIME WITH TIME ZONE 类型,或能隐式转换为上述类型的其他类型。
  • expr2:日期时间值,DATEDATETIMEDATETIME WITH TIME ZONE 类型,或能隐式转换为上述类型的其他类型。

第一个参数的取值说明

含义
YEAR
QUARTER季度
MONTH
WEEK
DAY
HOUR小时
MINUTE分钟
SECOND秒钟
MICROSECOND微秒

提示

  • NULL 无具体的类型,所以当第二个或第三个参数为 NULL 时,会产生异常 E10100 候选函数出现多义性,需要手动为参数指定具体的形参类型,如:TIMESTAMPDIFF(YEAR, NULL::DATETIME, NULL)
  • 第二个参数类型和第三个参数类型保持一致,或者能隐式转换,或者能找到两者进行比较操作时的公共类型。
  • 当第三个参数为 DATE 类型时,第一个参数仅支持 YEARQUARTERMONTHWEEKDAY;否则函数返回 NULL。若第一个参数为 HOURMINUTESECONDMICROSECOND,需要将第三个参数由 DATE 类型转换为 DATETIME 类型。

输出结果

返回 BIGINT 类型,输入参数 expr1expr2 为空字符串或 NULL 时,输出结果为 NULL

示例

sql
-- 返回 '2003-01-10' 和 '2003-01-02' 之间相差的天数
SQL> SELECT TIMESTAMPDIFF(DAY, '2003-01-10', '2003-01-02');

+-------+
| EXPR1 |
+-------+
| -8    |
+-------+

-- 返回 '2010-01-01 12:30:15.123' 和 '2003-01-02 16:38:35.412' 之间相差的小时
SQL> SELECT TIMESTAMPDIFF(HOUR, '2010-01-01 12:30:15.123', '2003-01-02 16:38:35.412');

+--------+
| EXPR1  |
+--------+
| -61339 |
+--------+

-- 返回 '2010-01-01 20:15:16.632 +05:30' 和 '2012-01-02 10:45:24.415 -06:30' 之间相差的秒
SQL> SELECT TIMESTAMPDIFF(SECOND, '2010-01-01 20:15:16.632 +05:30', '2012-01-02 10:45:24.415 -06:30');

+----------+
|  EXPR1   |
+----------+
| 63124207 |
+----------+