时间间隔表达式
- interval_expr是一个时间间隔表达式,其语法表示为:
INTERVAL expr unit
说明:expr为一个表达式,unit为expr的单位。unit允许的取值和对应的expr常量取值格式可参考表1。expr支持运算表达式、列引用和绑定参数用法。
注:若expr值的组成部分个数少于unit对应的标准形式时,将expr值的各个划分部分从右到左依次填充到unit对应标准形式中。例如:对于时间单位unit为DAY_SECOND,若expr为‘1 10’,则最终表示的时间间隔值为‘0 00:01:10’。
通常时间间隔表达式用于一些特定的时间计算函数,例如DATE_ADD()和DATE_SUB()等。
表 1 时间间隔表达式中unit的取值和对应的expr的表达格式
unit取值 | expr取值格式 |
---|---|
MICROSECOND | MICROSECONDS |
SECOND | SECONDS |
MINUTE | MINUTES |
HOUR | HOURS |
DAY | DAYS |
WEEK | WEEKS |
MONTH | MONTHS |
QUARTER | QUARTERS |
YEAR | YEARS |
SECOND_MICROSECOND | 'SECONDS.MICROSECONDS' |
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 | 'YEARS-MONTHS' |
示例:
openGauss=# create database test_db dbcompatibility 'B';
CREATE DATABASE
openGauss=# \c test_db
test_db=# set dolphin.b_compatibility_mode to on;
SET
test_db=# select date_add('1997-12-31 23:59:59',INTERVAL 1 MICROSECOND);
date_add
----------------------------
1997-12-31 23:59:59.000001
(1 row)
test_db=# select date_add('1997-12-31 23:59:59',INTERVAL '1.111' SECOND_MICROSECOND);
date_add
-------------------------
1998-01-01 00:00:00.111
(1 row)
test_db=# select '1997-12-11' + interval '1 10' day_second;
?column?
---------------------
1997-12-11 00:01:10
(1 row)
-- 运算表达式
test_db=# select '1997-12-11' + interval 1 + 2 * 3 day;
?column?
------------
1997-12-18
(1 row)
-- 列引用
test_db=# create table t1 (c1 int);
CREATE TABLE
test_db=# insert into t1 values(1);
INSERT 0 1
test_db=# select '1997-12-11' + interval c1 + 2 year from t1;
?column?
------------
2000-12-11
(1 row)
-- 绑定参数
test_db=# prepare stmt as 'select ? + interval ? hour';
PREPARE
test_db=# execute stmt('1997-12-11', 20);
?column?
---------------------
1997-12-11 20:00:00
(1 row)