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.
示例
假设我们使用CREATE语句在SQL数据库中创建了一个名为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;
在SQL数据库中成功创建了 EMPLOYEE 表。
+-----+--------+------+--------------------+
| 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 |
+-----+--------+------+--------------------+
以下查询将在 SUBMISSION_DATE 列的实体上增加10年-
注意 – 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 |
+-----+--------+-----------------+-------------------------+