更新时间:2025-09-12 GMT+08:00
分享

时间间隔表达式

语法:INTERVAL EXPR UNIT

说明:时间间隔表达式interval_expr表示一个时间间隔,其语法如上,INTERVAL为关键字,EXPR为任意表达式,将解释为一个时间类型的数值,UNIT为特定关键字,用于表示数值的单位,如HOUR、DAY、WEEK等。关键字INTERVAL和说明符不区分大小写。

时间间隔表达式中UNIT的取值范围如下表1所示。

  • interval_expr一般用于与另一个时间类型数值做运算,可作为函数DATE_ADD()、DATE_SUB()、ADDDATE()、SUBDATE()和TIMESTAMPADD()的入参,
  • 也可直接用加减运算符+、-与另一个时间类型数值进行计算。
  • 在做减法运算的时候不可以将interval_expr放在左侧,因一个时间间隔减去一个时间不符合逻辑。
  • 对于表1 时间间隔表达式UNIT取值范围所示的时间单位UNIT可分为单时间单位和多时间单位两部分:
    • 单时间单位从MICROSECOND到YEAR,会将EXPR解释为单一单位的时间数值,如'1'YEAR 表示1年。
    • 多时间单位从SECOND_MICROSECOND到YEAR_MONTH,会将EXPR解释为跨时间单位的时间数值,例如DAY_MINUTE会将EXPR解释为xxx日xxx时xxx分三部分。
  • EXPR中一段连续的数字字符会被解析为一个有效数字,可用任意字符隔开,例如'1:1:1' DAY_MINUTE表示1日1小时1分。若解析的有效数字个数不足跨时间单位中单一时间单位数,会将高位补0,例如'1:1' DAY_MINUTE表示0日1小时1分。
表1 时间间隔表达式UNIT取值范围

UNIT取值范围

预期EXPR格式

MICROSECOND

MICROSECOND

SECOND

SECOND

MINUTE

MINUTE

HOUR

HOUR

DAY

DAY

WEEK

WEEK

MONTH

MONTH

QUARTER

QUARTER

YEAR

YEAR

SECOND_MICROSECOND

SECOND_MICROSECOND

MINUTE_MICROSECOND

MINUTE_MICROSECOND

MINUTE_SECOND

MINUTE_SECOND

HOUR_MICROSECOND

HOUR_MICROSECOND

HOUR_SECOND

HOUR_SECOND

HOUR_MINUTE

HOUR_MINUTE

DAY_MICROSECOND

DAY_MICROSECOND

DAY_SECOND

DAY_SECOND

DAY_MINUTE

DAY_MINUTE

DAY_HOUR

DAY_HOUR

YEAR_MONTH

YEAR_MONTH

示例:

 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
m_db=# select date_add('1999-12-31',interval '1' day);
  date_add  
------------
 2000-01-01
(1 row)

m_db=# select adddate('1998-12-03', interval '1' YEAR);
  adddate   
------------
 1999-12-03
(1 row)

m_db=# select date_sub('1999-12-31',interval '1' day);
  date_sub  
------------
 1999-12-30
(1 row)

m_db=# select subdate('1998-12-03', interval '1' YEAR);
  subdate   
------------
 1997-12-03
(1 row)

m_db=# select timestampadd(day, '1', '1999-12-31');
 timestampadd 
--------------
 2000-01-01
(1 row)

m_db=# select '1998-12-03' + interval '1' YEAR;
  ?column?  
------------
 1999-12-03
(1 row)

m_db=# select '1998-12-03' - interval '1' YEAR;
  ?column?  
------------
 1997-12-03
(1 row)

m_db=# select interval '1' YEAR + '1998-12-03';
  ?column?  
------------
 1999-12-03
(1 row)

m_db=# select interval '1' YEAR - '1998-12-03';
ERROR:  syntax error at or near "-"
LINE 1: select interval '1' YEAR - '1998-12-03';
                                 ^

相关文档