- 类别:
DATEADD¶
将指定的日期或时间部分的指定值添加到日期、时间或时间戳中。
- 别名:
- 另请参阅:
语法¶
DATEADD( <date_or_time_part>, <value>, <date_or_time_expr> )
实参¶
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_part
为day
或更长时间(例如month
、year
),则函数返回一个 DATE 值。如果
date_or_time_part
小于一天(例如hour
、minute
、second
),则函数返回 TIMESTAMP_NTZ 值,并将00:00:00.000
作为日期的开始时间。
使用说明¶
当 date_or_time_part
是 year
、quarter
、或 :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;
+---------------+---------------------+
| 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;
+---------------+----------------------+
| 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');
运行向日期添加两年零两小时的查询:
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;
+---------------+---------------------+-------------------------+--------------------------+
| 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;
+---------------------+
| DATE_PLUS_ONE_MONTH |
|---------------------|
| 2023-02-28 |
+---------------------+
在一个月某个日期基础上增加一个月,确保增加后的月份的天数少于结果月份的天数。向 2 月 28 日加一个月,则返回 3 月 28 日。
SELECT DATEADD(month, 1, '2023-02-28'::DATE) AS date_plus_one_month;
+---------------------+
| DATE_PLUS_ONE_MONTH |
|---------------------|
| 2023-03-28 |
+---------------------+