返回首页

gbase数据、南大通用产品文档:GBase8aDATE_ADD(),DATE_SUB()

更新日期:2024年09月11日

函数说明
以下函数执行日期计算:
加法操作:DATE_ADD(date,INTERVAL expr type)
减法操作:DATE_SUB(date,INTERVAL expr type)
表5- 20 参数说明
参数名称


date
是一个DATETIME 或DATE 值,指定一个日期的开始。expr
是一个表达式,用来指定从起始日期添加或减去的时间间隔
值。
dateexpr
是一个字符串,对于负值的时间间隔,它可以以一个“-”开
头。
type
关键词,它指示了表达式被解释的方式。
INTERVAL
关键字和类型修饰符大小写不敏感。
表5- 21 相关的type 和expr 参数
type 值
期望的expr 格式
MICROSECOND
MICROSECONDS
MILLISECOND
MILLISECONDS
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'

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
787
type 值
期望的expr 格式
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'
说明

在expr 的格式中,GBase 8a MPP Cluster 允许任何字符作为定界符。表中
所显示的是建议的定界字符。
如果date 参数是一个DATE 值,并且计算的
间隔仅仅有YEAR、MONTH 和DAY 部分(没有时间部分),那么返回
值也是一个DATE 值。否则返回值是一个DATETIME 值。

如果表达式另一边是DATE 或DATETIME 类型,
那么INTERVAL expr type
允许出现在“+”的任何一边。对于“-”来说,INTERVAL expr type 值只
能出现在右边,因为从一个时间间隔减去一个DATE 或DATETIME 值没
有意义。

DATE_ADD(date,INTERVAL expr type)、DATE_SUB(date,INTERVAL expr
type)使用时需注意,当参数type 是复合时间单位,并且组成type 的两个
高低单位之间还包含其他单位时(如type 为HOUR_MICROSECOND,
HOUR 与MICROSECOND 之间还包含有MINUTE、SECOND),expr 参
数需要按顺序声明高低单位及其中间包含的所有单位的值,expr 参数值将
会从低单位顺次向高单位进行填充,不会忽略低单位与高单位之间包含的
其他单位。请严格按照上表type 和expr 对应的格式书写。如type 为
HOUR_MICROSECOND 的expr 值应为
02:00:00.000002 ,对应于
HOURS:MINUTES:SECONDS.MICROSECONDS。
例:
select
date_add('2022-02-16
18:00:00',interval
'02:00:00.000002'
HOUR_MICROSECOND);
日期增加了2HOUR2MICROSECOND ,结果为:2022-02-16
20:00:00.000002
select
date_add('2022-02-16
18:00:00',interval
'2:2'
HOUR_MICROSECOND);
日期增加了2SECOND2MICROSECOND ,结果为:2022-02-16
18:00:02.000002

如果用户从一个日期类型中加或减一个包含时间的值,结果会自动调节然
后转换成日期类型。

如果用户使用了不正确的日期,返回结果将是NULL。

如果用户增加MONTH、YEAR_MONTH 或YEAR,并且结果日期的天比
新月份的最大天数还大,那么它将被调整到新月份的最大天数。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
788
示例
示例1:将“2020-08-30 23:59:59”加1 秒。
gbase> SELECT '2020-08-30 23:59:59' + INTERVAL 1 SECOND FROM
dual;
+--------------------------------------------+
| '2020-08-30 23:59:59' + INTERVAL 1 SECOND
|
+--------------------------------------------+
| 2020-08-31 00:00:00
|
+--------------------------------------------+
1 row in set
示例2:使用DATE_ADD()函数,将“2020-08-30 23:59:59”加1 秒,执行结果与
示例1 相同。
gbase> SELECT DATE_ADD('2010-08-30 23:59:59',INTERVAL 1 SECOND)
FROM dual;
+---------------------------------------------------+
| DATE_ADD('2010-08-30 23:59:59',INTERVAL 1 SECOND) |
+---------------------------------------------------+
| 2010-08-31 00:00:00
|
+---------------------------------------------------+
1 row in set
示例3:将“2020-12-31 23:59:59”加1 天。
gbase> SELECT INTERVAL 1 DAY + '2020-12-31 23:59:59' FROM dual;
+----------------------------------------+
| INTERVAL 1 DAY + '2020-12-31 23:59:59' |
+----------------------------------------+
| 2021-01-01 23:59:59
|
+----------------------------------------+
1 row in set
示例4:使用DATE_ADD()函数,将“2020-12-31 23:59:59”加1 天,执行结果与
示例3 相同。
gbase> SELECT DATE_ADD('2020-12-31 23:59:59',INTERVAL 1 DAY)
FROM dual;
+------------------------------------------------+
| DATE_ADD('2020-12-31 23:59:59',INTERVAL 1 DAY) |
+------------------------------------------------+
| 2021-01-01 23:59:59
|
+------------------------------------------------+
1 row in set

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
789
示例5:DATE_ADD()函数,type 类型为“MINUTE_SECOND”。
gbase> SELECT DATE_ADD('2020-12-31 23:59:59', INTERVAL '1:1'
MINUTE_SECOND) FROM dual;
+---------------------------------------------------------------+
| DATE_ADD('2020-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND) |
+---------------------------------------------------------------+
| 2021-01-01 00:01:00
|
+---------------------------------------------------------------+
1 row in set
示例6:DATE_SUB()函数,type 类型为“DAY_SECOND”。
gbase> SELECT DATE_SUB('2020-01-01 00:00:00', INTERVAL '1 1:1:1'
DAY_SECOND) FROM dual;
+----------------------------------------------------------------+
| DATE_SUB('2020-01-01 00:00:00', INTERVAL '1 1:1:1' DAY_SECOND) |
+----------------------------------------------------------------+
| 2019-12-30 22:58:59
|
+----------------------------------------------------------------+
1 row in set
示例7:DATE_ADD()函数,type 类型为“DAY_HOUR”。
gbase> SELECT DATE_ADD('2020-01-01 00:00:00', INTERVAL '-1 10'
DAY_HOUR) FROM dual;
+------------------------------------------------------------+
| DATE_ADD('2020-01-01 00:00:00', INTERVAL '-1 10' DAY_HOUR) |
+------------------------------------------------------------+
| 2019-12-30 14:00:00
|
+------------------------------------------------------------+
1 row in set
示例8:DATE_ADD()函数,type 类型为“DAY_HOUR”。
因为“-1”是减去1 天,所以小时“-10”,也是进行减法,这个操作,取决于最
前面的操作符号。下面示例里的写法,等价于示例7 的计算。
gbase> SELECT DATE_ADD('2020-01-01 00:00:00', INTERVAL '-1 -10'
DAY_HOUR) FROM dual;
+-------------------------------------------------------------+
| DATE_ADD('2020-01-01 00:00:00', INTERVAL '-1 -10' DAY_HOUR) |
+-------------------------------------------------------------+
| 2019-12-30 14:00:00
|
+-------------------------------------------------------------+
1 row in set
示例9:DATE_SUB()函数,type 类型为“DAY”。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
790
gbase> SELECT DATE_SUB('2020-01-02', INTERVAL 31 DAY) FROM
dual;
+-----------------------------------------+
| DATE_SUB('2020-01-02', INTERVAL 31 DAY) |
+-----------------------------------------+
| 2019-12-02 00:00:00
|
+-----------------------------------------+
1 row in set
示例10:DATE_ADD()函数,type 类型为“SECOND_MICROSECOND”。
gbase> SELECT DATE_ADD('2020-08-31 23:59:59.000002',INTERVAL
'1.999999' SECOND_MICROSECOND) AS DATE_ADD FROM dual;
+----------------------------+
| DATE_ADD
|
+----------------------------+
| 2020-09-01 00:00:01.000001 |
+----------------------------+
1 row in set
示例11:在“2020-08-30”上加1 天。
gbase> SELECT DATE_ADD('2020-08-30', INTERVAL 1 DAY) FROM
dual;
+----------------------------------------+
| DATE_ADD('2020-08-30', INTERVAL 1 DAY) |
+----------------------------------------+
| 2020-08-31 00:00:00
|
+----------------------------------------+
1 row in set
示例12:在日期类型中加1 个小时,返回结果转换为“日期+时间”类型。
gbase> SELECT DATE_ADD('2020-01-01', INTERVAL 1 HOUR) FROM
dual;
+-----------------------------------------+
| DATE_ADD('2020-01-01', INTERVAL 1 HOUR) |
+-----------------------------------------+
| 2020-01-01 01:00:00
|
+-----------------------------------------+
1 row in set
示例13:在“2020-01-30”上加1 月。
gbase> SELECT DATE_ADD('2020-01-30', INTERVAL 1 MONTH) FROM
dual;
+------------------------------------------+
| DATE_ADD('2020-01-30', INTERVAL 1 MONTH) |

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
791
+------------------------------------------+
| 2020-02-29 00:00:00
|
+------------------------------------------+
1 row in set

开始于--,一直到行为结束,例子如下所示:
DECLARE
howmany NUMBER;
num_tables NUMBER;
BEGIN
-- Begin processing

GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 6 -
SELECT COUNT(*) INTO howmany
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'; -- Check number of tables
num_tables := howmany; -- Compute some other value
END;

功能
该参数用来配置并行提交,提交阶段分两步,第一步flush data 到单机,第二步真
正提交,其中第一步可以并行执行,并行度需要根据CPU 核数来配置。
表6- 45 参数值范围说明表
默认值
最小值
最大值

GBase 8a MPP Cluster 产品手册
6 附录
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1559
默认值
最小值
最大值
1
1
50