SQL - DATEADD 函数



SQL 的DATEADD()函数是一个内置函数,它将指定的数字(带符号整数)的间隔添加到给定的日期或时间,并返回修改后的日期/时间值。

此函数接受三个参数 - 要添加的间隔(例如年、季度、月、小时、分钟等)、要添加的间隔数(可以是正整数或负整数)以及指定加法起点的日期或时间值。

注意 - 此函数的返回值的数据类型是动态的,它取决于为日期提供的参数。

语法

以下是 SQL DATEADD()函数的语法 -

DATEADD(datepart, number, date)

参数

此函数接受三个参数。下面描述了相同的内容 -

  • datepart - 这指定要添加的日期或时间段。以下是可能的值 -
    • year, yyyy, yy = 年
    • quarter, qq, q = 季度
    • month, mm, m = 月
    • dayofyear, dy, y = 一年中的第几天
    • day, dd, d = 日
    • week, ww, wk = 周
    • weekday, dw, w = 工作日
    • hour, hh = 小时
    • minute, mi, n = 分钟
    • second, ss, s = 秒
    • millisecond, ms = 毫秒
  • number - 这指定要添加到日期的间隔。此间隔可以是正数(将获取将来的日期或日期时间)或负数(将获取过去的日期或日期时间)整数。
  • date - 这指定添加间隔的日期。

示例

在下面的示例中,我们尝试将 7 年添加到给定的日期 -

SQL> SELECT DATEADD(YEAR, 7, '2023/02/14') AS RESULT_DATE;

输出

如果我们执行上述查询,则结果将如下所示 -

+-------------------------+
| RESULT_DATE             |
+-------------------------+
| 2030-02-14 00:00:00.000 |
+-------------------------+

示例

在这里,我们尝试使用以下查询将 7 个月添加到给定的日期 -

SQL> SELECT DATEADD(MONTH, 7, '2023/02/14') AS RESULT_DATE;

输出

当我们执行上述查询时,将获得以下输出 -

+-------------------------+
| RESULT_DATE             |
+-------------------------+
| 2023-09-14 00:00:00.000 |
+-------------------------+

示例

以下查询将 1 周添加到给定的日期 -

SQL> SELECT DATEADD(WEEK, 1, '2023/02/14') AS RESULT_DATE;

输出

执行上述查询后,输出将显示如下 -

+-------------------------+
| RESULT_DATE             |
+-------------------------+
| 2023-02-21 00:00:00.000 |
+-------------------------+

示例

在这里,我们使用以下查询将 1 小时添加到提供的时间 -

SQL> SELECT DATEADD(HOUR, 1, '2023/02/14 09:00:30.430') AS RESULT_DATE;

输出

执行上述查询后,输出将显示如下 -

+-------------------------+
| RESULT_DATE             |
+-------------------------+
| 2023-02-14 10:00:30.430 |
+-------------------------+

示例

以下查询将 30 秒添加到指定的时间 -

SQL> SELECT DATEADD(SECOND, 30, '2023/02/14 09:00:30.430') AS RESULT_DATE;

输出

当我们执行上述查询时,将获得以下输出 -

+-------------------------+
| RESULT_DATE             |
+-------------------------+
| 2023-02-14 09:01:00.430 |
+-------------------------+

示例

在下面的示例中,我们尝试从指定的日期中减去 1 个月 -

SQL> SELECT DATEADD(MONTH, -1, '2023/02/14') AS RESULT_DATE;

输出

执行上述查询后,输出将显示如下 -

+-------------------------+
| RESULT_DATE             |
+-------------------------+
| 2023-01-14 00:00:00.000 |
+-------------------------+

示例

在这里,我们使用以下查询将 2 年添加到指定的日期 -

SQL> SELECT DATEADD(YEAR, +2, '2023/02/14') AS RESULT_DATE;

输出

执行上述查询后,输出将显示如下 -

+-------------------------+
| RESULT_DATE             |
+-------------------------+
| 2025-04-14 00:00:00.000 |
+-------------------------+

示例

如果作为参数传递给此函数的值无效,则会导致错误。

SQL> SELECT DATEADD(YEAR, 2, '2023/15/76') AS RESULT_DATE;

错误

当我们执行上述查询时,将获得以下输出 -

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

示例

假设我们在 SQL 数据库中使用 CREATE 语句创建了一个名为 EMPLOYEE 的表,如下面的查询所示 -

SQL> CREATE TABLE EMPLOYEE (ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, SUBMISSION_DATE VARCHAR (25));

现在,让我们使用 INSERT 语句在 EMPLOYEE 表中插入一些记录,如下面的查询所示 -

SQL> INSERT INTO EMPLOYEE(ID, NAME, AGE, SUBMISSION_DATE) VALUES(1, 'Dhruv', 32, '2020-02-10');
INSERT INTO EMPLOYEE(ID, NAME, AGE, SUBMISSION_DATE) VALUES(2, 'Arjun', 25, '2020-12-15');
INSERT INTO EMPLOYEE(ID, NAME, AGE, SUBMISSION_DATE) VALUES(3, 'Dev', 23, '2021-03-11');
INSERT INTO EMPLOYEE(ID, NAME, AGE, SUBMISSION_DATE) VALUES(4, 'Riya', 25, '2019-02-05');
INSERT INTO EMPLOYEE(ID, NAME, AGE, SUBMISSION_DATE) VALUES(5, 'Aarohi', 27, '2018-06-16');
INSERT INTO EMPLOYEE(ID, NAME, AGE, SUBMISSION_DATE) VALUES(6, 'Lisa', 22, '2020-11-13');
INSERT INTO EMPLOYEE(ID, NAME, AGE, SUBMISSION_DATE) VALUES(7, 'Roy', 24, '2020-01-01');

我们可以使用以下查询验证表是否已创建 -

SQL> SELECT * FROM EMPLOYEE;

表 EMPLOYEE 已成功在 SQL 数据库中创建。

+-----+--------+------+--------------------+
| ID  | NAME   | AGE  | SUBMISSION_DATE    | 
+-----+--------+------+--------------------+
| 1   | Dhruv  | 32   | 2020-02-10         | 
| 2   | Arjun  | 25   | 2020-12-15         |  
| 3   | Dev    | 23   | 2021-03-11         |
| 4   | Riya   | 25   | 2019-02-05         |
| 5   | Aarohi | 27   | 2018-06-16         |
| 6   | Lisa   | 22   | 2020-11-13         |
| 7   | Roy    | 24   | 2020-01-01         |
+-----+--------+------+--------------------+

以下查询将 10 年添加到SUBMISSION_DATE列的实体 -

注意 - CURRENT_TIMESTAMP检索当前的日期和时间。

SQL> SELECT ID, NAME, SUBMISSION_DATE, DATEADD(YEAR, 10, SUBMISSION_DATE) AS DATE_ADD FROM EMPLOYEE;

输出

当我们执行上述查询时,将获得以下输出 -

+-----+--------+-----------------+-------------------------+
| ID  | NAME   | SUBMISSION_DATE | DATE_ADD                | 
+-----+--------+-----------------+-------------------------+
| 1   | Dhruv  | 2020-02-10      | 2030-02-10 00:00:00.000 |
| 2   | Arjun  | 2020-12-15      | 2030-12-15 00:00:00.000 |
| 3   | Dev    | 2021-03-11      | 2031-03-11 00:00:00.000 |
| 4   | Riya   | 2019-02-05      | 2029-02-05 00:00:00.000 |
| 5   | Aarohi | 2018-06-16      | 2028-06-16 00:00:00.000 |
| 6   | Lisa   | 2020-11-13      | 2030-11-13 00:00:00.000 |
| 7   | Roy    | 2020-01-01      | 2030-01-01 00:00:00.000 |
+-----+--------+-----------------+-------------------------+

示例

考虑先前创建的表,让我们从SUBMISSION_DATE列的实体中减去 2 个季度 -

SQL> SELECT ID, NAME, SUBMISSION_DATE, DATEADD(QUARTER, -2, SUBMISSION_DATE) AS DATE_ADD FROM EMPLOYEE;

输出

如果我们执行上述查询,则结果将如下所示 -

+-----+--------+-----------------+-------------------------+
| ID  | NAME   | SUBMISSION_DATE | DATE_ADD                |
+-----+--------+-----------------+-------------------------+
| 1   | Dhruv  | 2020-02-10      | 2019-08-10 00:00:00.000 |
| 2   | Arjun  | 2020-12-15      | 2020-06-15 00:00:00.000 |
| 3   | Dev    | 2021-03-11      | 2020-09-11 00:00:00.000 |
| 4   | Riya   | 2019-02-05      | 2018-08-05 00:00:00.000 |
| 5   | Aarohi | 2018-06-16      | 2017-12-16 00:00:00.000 |
| 6   | Lisa   | 2020-11-13      | 2020-05-13 00:00:00.000 |
| 7   | Roy    | 2020-01-01      | 2019-07-01 00:00:00.000 |
+-----+--------+-----------------+-------------------------+
sql-date-functions.htm
广告