时间间隔表达式
语法: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分。
|
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'; ^ |