TIMESTAMPDIFF
📄字数 998
👁️阅读量 加载中...
功能描述
计算两个日期或日期时间值之间的差异,并返回指定时间单位的差值。
语法格式
sql
TIMESTAMPDIFF(unit, expr1, expr2)1
输入参数
unit:时间间隔单位,INTEGER类型,或能隐式转换为INTEGER类型的其他类型。expr1:日期时间值,DATE、DATETIME或DATETIME WITH TIME ZONE类型,或能隐式转换为上述类型的其他类型。expr2:日期时间值,DATE、DATETIME或DATETIME WITH TIME ZONE类型,或能隐式转换为上述类型的其他类型。
第一个参数的取值说明
| 值 | 含义 |
|---|---|
| YEAR | 年 |
| QUARTER | 季度 |
| MONTH | 月 |
| WEEK | 周 |
| DAY | 天 |
| HOUR | 小时 |
| MINUTE | 分钟 |
| SECOND | 秒钟 |
| MICROSECOND | 微秒 |
提示
- 因
NULL无具体的类型,所以当第二个或第三个参数为NULL时,会产生异常E10100 候选函数出现多义性,需要手动为参数指定具体的形参类型,如:TIMESTAMPDIFF(YEAR, NULL::DATETIME, NULL)。 - 第二个参数类型和第三个参数类型保持一致,或者能隐式转换,或者能找到两者进行比较操作时的公共类型。
- 当第三个参数为
DATE类型时,第一个参数仅支持YEAR、QUARTER、MONTH、WEEK、DAY;否则函数返回NULL。若第一个参数为HOUR、MINUTE、SECOND、MICROSECOND,需要将第三个参数由DATE类型转换为DATETIME类型。
输出结果
返回 BIGINT 类型,输入参数 expr1 或 expr2 为空字符串或 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 |
+----------+1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
