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
廣告