更新时间:2026-01-22 GMT+08:00
分享

时间和日期运算函数

age(timestamp, timestamp)

描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负。

返回值类型:interval

示例:

1
2
3
4
5
SELECT age(timestamp '2001-04-10', timestamp '1957-06-13');
           age           
-------------------------
 43 years 9 mons 27 days
(1 row)

age(timestamp)

描述:当前时间和参数相减。

返回值类型:interval

示例:

1
2
3
4
5
SELECT age(timestamp '1957-06-13');
           age           
-------------------------
 68 years 7 mons 7 days
(1 row)

adddate(date, interval | int)

描述:返回给定日期时间加上指定单位的时间间隔的结果。默认单位(即第二个参数为整型时)为天数。

返回值类型:timestamp

示例:

当入参为text类型时:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SELECT adddate('2020-11-13', 10);
  adddate
------------
 2020-11-23
(1 row)

SELECT adddate('2020-11-13', interval '1' month);
  adddate
------------
 2020-12-13
(1 row)

SELECT adddate('2020-11-13 12:15:16', interval '1' month);
       adddate
---------------------
 2020-12-13 12:15:16
(1 row)


SELECT adddate('2020-11-13', interval '1' minute);
       adddate
---------------------
 2020-11-13 00:01:00
(1 row)

当入参为date类型时:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SELECT adddate(current_date, 10);
  adddate
------------
 2021-09-24
(1 row)

SELECT adddate(date '2020-11-13', interval '1' month);
       adddate
---------------------
 2020-12-13 00:00:00
(1 row)

subdate(date, interval | int)

描述:返回给定日期时间减去指定单位的时间间隔的结果。默认单位(即第二个参数为整型时)为天数。

返回值类型:timestamp

示例:

当入参为text类型时:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT subdate('2020-11-13', 10);
  subdate
------------
 2020-11-03
(1 row)

SELECT subdate('2020-11-13', interval '2' month);
  subdate
------------
 2020-09-13
(1 row)

SELECT subdate('2020-11-13 12:15:16', interval '1' month);
       subdate
---------------------
 2020-10-13 12:15:16
(1 row)

SELECT subdate('2020-11-13', interval '2' minute);
       subdate
---------------------
 2020-11-12 23:58:00
(1 row)

当入参为date类型时:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SELECT subdate(current_date, 10);
  subdate
------------
 2021-09-05
(1 row)

SELECT subdate(current_date, interval '1' month);
       subdate
---------------------
 2021-08-15 00:00:00
(1 row)

addtime(timestamp | time | text, interval | text)

描述:返回给定日期/时间加上指定时间间隔的结果。该函数仅8.2.0及以上集群版本支持。

返回值类型:与第一个入参类型相同。

示例:

1
2
3
4
5
SELECT ADDTIME('2020-11-13 01:01:01', '23:59:59');
       addtime
---------------------
 2020-11-14 01:01:00
(1 row)

addtime(time, interval)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SELECT ADDTIME('20:1:1'::TIME, '20:59:59+8');
  addtime  
-----------
 233:01:00
(1 row)

SELECT ADDTIME('20:1:1'::TIME, '8 20:59:59');
  addtime  
-----------
 233:01:00
(1 row)

addtime(text, interval)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT ADDTIME('20:1:1', '20:59:59+8');
  addtime  
-----------
 233:01:00
(1 row)
SELECT ADDTIME('20:1:1', '8 20:59:59');
  addtime  
-----------
 233:01:00
(1 row)

subtime(timestamp | time | text, interval | text)

描述:返回给定日期/时间减去指定时间间隔的结果。该函数仅8.2.0及以上集群版本支持。

返回值类型:与第一个入参类型相同。

示例:

1
2
3
4
5
SELECT subtime('2020-11-13 01:01:01', '23:59:59');
       addtime
---------------------
 2020-11-12 01:01:02
(1 row)

date_add(date, interval)

描述:返回给定日期时间加上指定单位的时间间隔的结果。等效于adddate(date, interval | int)

返回值类型:timestamp

date_sub(date, interval)

描述:返回给定日期时间减去指定单位的时间间隔的结果,等效于subdate(date, interval | int)

返回值类型:timestamp

timestampadd(field, numeric, timestamp)

描述:将以单位field的整数时间间隔(秒数可以带小数)添加到日期时间表达式中。若数值为负,则表示从给定的时间日期时间表达式中减去对应的时间间隔。field支持的参数为year,month,quarter,day,week,hour,minute,second和microsecond。

当函数传入的时间表达式格式为yyyy-mon-day+{value}的格式时,其中{value}字段将被解析为时区表达式,表示当前时间的时区,如'2023-01-31+1'将被解析为东一区时区的2023年01月31日。DWS这种表达式传入格式的解析与MySQL解析规则不一致,MySQL数据库仅当开启宽松解析规则才能支持此类格式,且解析结果为系统时区的2023年01月31日1时。

返回值类型:timestamp

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SELECT timestampadd(year, 1, timestamp '2020-2-29');
    timestampadd
---------------------
 2021-02-28 00:00:00
(1 row)

SELECT timestampadd(second, 2.354156, timestamp '2020-11-13');
        timestampadd
----------------------------
 2020-11-13 00:00:02.354156
(1 row)

timestampdiff(field, timestamp1, timestamp2)

描述:将两个日期参数相减(timestamp2 - timestamp1),并以单位field作为返回值。若相减值为负,则函数返回值为负。field支持的参数为year、month、quarter、day、week、hour、minute、second和microsecond。

返回值类型:bigint

示例:

1
2
3
4
5
SELECT timestampdiff(day, timestamp '2001-02-01', timestamp '2003-05-01 12:05:55');
 timestampdiff 
---------------
      819
(1 row)

timediff(timestamp | time | text, timestamp | time | text)

描述:将两个日期参数相减。若相减值为负,则函数返回值为负。两个入参类型要求一致。该函数仅8.2.0及以上集群版本支持。

返回值类型:time

示例:

1
2
3
4
5
SELECT timediff('2022-7-5 1:1:1', '2021-7-5 1:1:1');
   timediff 
---------------
  8760:00:00
(1 row)

datediff(date1, date2)

描述:返回给定日期之间相差的天数值。

返回值类型:bigint

示例:

1
2
3
4
5
SELECT datediff(date '2020-11-13', date '2012-10-16');
 datediff
----------
     2950
(1 row)

period_add(P, N)

描述:返回给定时期加上N个月后的日期。

返回值类型:integer

示例:

1
2
3
4
5
SELECT period_add(200801, 2);
 period_add
------------
     200803
(1 row)

period_diff(P1, P2)

描述:返回给定日期之间的月数差值。

返回值类型:integer

1
2
3
4
5
SELECT period_diff(200802, 200703);
 period_diff
-------------
          11
(1 row)

add_months(d,n)

描述:用于计算日期date加上n个月后的日期值。

返回值类型:timestamp

示例:

1
2
3
4
5
SELECT add_months(to_date('2017-5-29', 'yyyy-mm-dd'), 11) FROM dual;
     add_months      
---------------------
 2018-04-29 00:00:00
(1 row)

相关文档