类别:

日期和时间函数

DATEADD

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

别名:

TIMEADDTIMESTAMPADD

另请参阅:

ADD_MONTHS

语法

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

实参

date_or_time_part

该实参表示要添加的时间单位。例如,如果您想添加两天,则指定 day。此度量单位必须是 支持的日期和时间部分 中列出的值之一。

value

这是要添加的时间单位数。例如,如果时间单位为 day,并且要加上两天,请指定 2。如果要减去两天,请指定 -2

date_or_time_expr

date_or_time_expr 的计算结果必须是日期、时间或时间戳。这是要添加的日期、时间或时间戳。例如,如果要为 2024 年 8 月 1 日添加 2 天,请指定 '2024-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、或 :code:`month`(或其任何变体)时,如果结果月份的天数少于该月的原始天数,则该月的结果天数可能与原始天数不同。

示例

TIMEADD 和 TIMESTAMPADD 函数是 DATEADD 函数的别名。您可以在示例中使用这三个函数中的任何一个来返回相同的结果。

向日期添加年份:

SELECT TO_DATE('2022-05-08') AS original_date,
       DATEADD(year, 2, TO_DATE('2022-05-08')) AS date_plus_two_years;
Copy
+---------------+---------------------+
| ORIGINAL_DATE | DATE_PLUS_TWO_YEARS |
|---------------+---------------------|
| 2022-05-08    | 2024-05-08          |
+---------------+---------------------+

从日期减去年数:

SELECT TO_DATE('2022-05-08') AS original_date,
       DATEADD(year, -2, TO_DATE('2022-05-08')) AS date_minus_two_years;
Copy
+---------------+----------------------+
| ORIGINAL_DATE | DATE_MINUS_TWO_YEARS |
|---------------+----------------------|
| 2022-05-08    | 2020-05-08           |
+---------------+----------------------+

向日期添加两年零两小时。首先,设置时间戳输出格式,创建表,并插入数据:

ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF9';
CREATE TABLE datetest (d date);
INSERT INTO datetest VALUES ('2022-04-05');
Copy

运行向日期添加两年零两小时的查询:

SELECT d AS original_date,
       DATEADD(year, 2, d) AS date_plus_two_years,
       TO_TIMESTAMP(d) AS original_timestamp,
       DATEADD(hour, 2, d) AS timestamp_plus_two_hours
  FROM datetest;
Copy
+---------------+---------------------+-------------------------+--------------------------+
| ORIGINAL_DATE | DATE_PLUS_TWO_YEARS | ORIGINAL_TIMESTAMP      | TIMESTAMP_PLUS_TWO_HOURS |
|---------------+---------------------+-------------------------+--------------------------|
| 2022-04-05    | 2024-04-05          | 2022-04-05 00:00:00.000 | 2022-04-05 02:00:00.000  |
+---------------+---------------------+-------------------------+--------------------------+

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

SELECT DATEADD(month, 1, '2023-01-31'::DATE) AS date_plus_one_month;
Copy
+---------------------+
| DATE_PLUS_ONE_MONTH |
|---------------------|
| 2023-02-28          |
+---------------------+

在一个月某个日期基础上增加一个月,确保增加后的月份的天数少于结果月份的天数。向 2 月 28 日加一个月,则返回 3 月 28 日。

SELECT DATEADD(month, 1, '2023-02-28'::DATE) AS date_plus_one_month;
Copy
+---------------------+
| DATE_PLUS_ONE_MONTH |
|---------------------|
| 2023-03-28          |
+---------------------+
语言: 中文