
# 时间间隔表达式
语法：
```
INTERVAL EXPR UNIT
```
说明：时间间隔表达式interval_expr表示一个时间间隔，INTERVAL为关键字，EXPR为任意表达式，将解释为一个时间类型的数值，UNIT为特定关键字，用于表示数值的单位，如HOUR、DAY、WEEK等。关键字INTERVAL和说明符不区分大小写。
时间间隔表达式中UNIT的取值范围如[表1]所示。
![](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 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]中显示的是建议的分隔符。
 
 表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 | 'MINUTES:SECONDS.MICROSECONDS'            |
| MINUTE_SECOND      | 'MINUTES:SECONDS'                         |
| HOUR_MICROSECOND   | 'HOURS:MINUTES:SECONDS.MICROSECONDS'      |
| HOUR_SECOND        | 'HOURS:MINUTES:SECONDS'                   |
| HOUR_MINUTE        | 'HOURS:MINUTES'                           |
| DAY_MICROSECOND    | 'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' |
| DAY_SECOND         | 'DAYS HOURS:MINUTES:SECONDS'              |
| DAY_MINUTE         | 'DAYS HOURS:MINUTES'                      |
| DAY_HOUR           | 'DAYS HOURS'                              |
| YEAR_MONTH         | 'YEAR-MONTH'                              |
   
示例：
```
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_add('1999-12-31',interval '1 01:02:03.34' DAY_MICROSECOND);
          date_add          
----------------------------
 2000-01-01 01:02:03.340000
(1 row)
m_db=# SELECT date_add('1999-12-31',interval '1 01:02:03.345678' DAY_MICROSECOND);
          date_add          
----------------------------
 2000-01-01 01:02:03.345678
(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';
                                 ^
```
