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