类别:

日期和时间函数

DATEADD

将指定的日期或时间部分的指定值添加到日期、时间或时间戳中。

别名:

TIMEADDTIMESTAMPADD

另请参阅:

ADD_MONTHS

语法

DATEADD( <date_or_time_part>, <value>, <date_or_time_expr> )
Copy

实参

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_partday 或更长时间(例如 monthyear),则函数返回一个 DATE 值。

  • 如果 date_or_time_part 小于一天(例如 hourminutesecond),则函数返回 TIMESTAMP_NTZ 值,并将 00:00:00.000 作为日期的开始时间。

使用说明

  • date_or_time_partyearquarter、或 month (或其任何变体)时,如果结果月份的天数少于该月的原始天数,则该月的结果天数可能与原始天数不同。

示例

向日期添加年份:

SELECT TO_DATE('2013-05-08') AS v1, DATEADD(year, 2, TO_DATE('2013-05-08')) AS v;
Copy

输出:

+------------+------------+
| V1         | V          |
|------------+------------|
| 2013-05-08 | 2015-05-08 |
+------------+------------+
Copy

将 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');
Copy

执行查询,以将 2 年零 2 小时添加到日期:

SELECT d AS "DATE", dateadd(year, 2, d) AS add_2_years, 
    dateadd(hour, 2, d) AS add_2_hours
  FROM datetest;
Copy

输出:

+------------+-------------+-------------------------+
| DATE       | ADD_2_YEARS | ADD_2_HOURS             |
|------------+-------------+-------------------------|
| 2013-04-05 | 2015-04-05  | 2013-04-05 02:00:00.000 |
+------------+-------------+-------------------------+
Copy

向时间戳添加小时数:

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;
Copy

输出:

+-------------------------------+-------------------------------+
| V1                            | V                             |
|-------------------------------+-------------------------------|
| 2013-05-08 11:22:33.444000000 | 2013-05-08 13:22:33.444000000 |
+-------------------------------+-------------------------------+
Copy

在一个月某个日期基础上增加一个月,确保增加后的月份的天数不少于结果月份的天数。例如,如果今天是 1 月 31 日,那么添加一个月 应该得出“2 月 31 日”的结果。

SELECT DATEADD(MONTH, 1, '2000-01-31'::DATE) AS DIFFERENT_DAY;
Copy

输出:

+---------------+
| DIFFERENT_DAY |
|---------------|
| 2000-02-29    |
+---------------+
Copy

在一个月某个日期基础上增加一个月,确保增加后的月份的天数少于结果月份的天数。在 2 月 29 日的基础上增加一个月应该会得出 3 月 29 日,这是安全的。

SELECT DATEADD(MONTH, 1, '2000-02-29'::DATE) AS RESULT;
Copy

输出:

+------------+
| RESULT     |
|------------|
| 2000-03-29 |
+------------+
Copy
语言: 中文