- 类别:
DATEADD¶
将指定的日期或时间部分的指定值添加到日期、时间或时间戳中。
- 别名:
- 另请参阅:
语法¶
DATEADD( <date_or_time_part>, <value>, <date_or_time_expr> )
实参¶
date_or_time_part
该实参表示要添加的时间单位。例如,如果要增加 2 天,则将为
DAY
。此度量单位必须是 支持的日期和时间部分 中列出的值之一。value
这是要添加的时间单位数。例如,如果要增加 2 天,则将为 2。
date_or_time_expr
date_or_time_expr
的计算结果必须是日期、时间或时间戳。这是您要添加的日期、时间或时间戳。例如,如果要为 2018 年 8 月 1 日添加 2 天,则将为'2018-08-01'::DATE
。如果数据类型为 TIME,则
date_or_time_part
必须以小时或更短时间为单位,而不能使用超过天的单位。如果输入数据类型为 DATE,而
date_or_time_part
是小时或更短,则不会拒绝输入值,但会将其视为 TIMESTAMP,并将小时、分钟、秒和分数秒的初始值均设置为 0(例如,指定日期的午夜)。
返回¶
如果 date_or_time_expr
是时间:
返回数据类型为时间。
如果 date_or_time_expr
是时间戳:
返回数据类型为时间戳。
如果 date_or_time_expr
是日期:
如果
date_or_time_part
为day
或更长时间(例如month
、year
),则函数返回一个 DATE 值。如果
date_or_time_part
小于一天(例如hour
、minute
、second
),则函数返回 TIMESTAMP_NTZ 值,并将 00:00:00.000 作为日期的开始时间。
使用说明¶
当
date_or_time_part
是year
、quarter
、或month
(或其任何变体)时,如果结果月份的天数少于该月的原始天数,则该月的结果天数可能与原始天数不同。
示例¶
向日期添加年份:
SELECT TO_DATE('2013-05-08') AS v1, DATEADD(year, 2, TO_DATE('2013-05-08')) AS v;输出:
+------------+------------+ | V1 | V | |------------+------------| | 2013-05-08 | 2015-05-08 | +------------+------------+
将 2 年零 2 小时添加到日期:
此示例和一些后续示例的初始设置:
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF9'; CREATE TABLE datetest (d date); INSERT INTO datetest VALUES ('2013-04-05');执行查询,以将 2 年零 2 小时添加到日期:
SELECT d AS "DATE", dateadd(year, 2, d) AS add_2_years, dateadd(hour, 2, d) AS add_2_hours FROM datetest;输出:
+------------+-------------+-------------------------+ | DATE | ADD_2_YEARS | ADD_2_HOURS | |------------+-------------+-------------------------| | 2013-04-05 | 2015-04-05 | 2013-04-05 02:00:00.000 | +------------+-------------+-------------------------+
向时间戳添加小时数:
SELECT TO_TIMESTAMP_LTZ('2013-05-08 11:22:33.444') AS v1, DATEADD(HOUR, 2, TO_TIMESTAMP_LTZ('2013-05-08 11:22:33.444')) AS v;输出:
+-------------------------------+-------------------------------+ | V1 | V | |-------------------------------+-------------------------------| | 2013-05-08 11:22:33.444000000 | 2013-05-08 13:22:33.444000000 | +-------------------------------+-------------------------------+
在一个月某个日期基础上增加一个月,确保增加后的月份的天数不少于结果月份的天数。例如,如果今天是 1 月 31 日,那么添加一个月 不 应该得出“2 月 31 日”的结果。
SELECT DATEADD(MONTH, 1, '2000-01-31'::DATE) AS DIFFERENT_DAY;输出:
+---------------+ | DIFFERENT_DAY | |---------------| | 2000-02-29 | +---------------+
在一个月某个日期基础上增加一个月,确保增加后的月份的天数少于结果月份的天数。在 2 月 29 日的基础上增加一个月应该会得出 3 月 29 日,这是安全的。
SELECT DATEADD(MONTH, 1, '2000-02-29'::DATE) AS RESULT;输出:
+------------+ | RESULT | |------------| | 2000-03-29 | +------------+