MySQL - DATE_SUB() 函式



MySQL 的DATE_SUB()函式是 MySQL SUBDATE() 函式的同義詞。

DATE_SUB() 函式也用於從日期值中減去指定的間隔。此函式接受兩個引數:一個是日期,另一個是需要從指定的日期值中減去的間隔。得到的結果將是減去間隔後的最終日期。如果日期和間隔引數均為 NULL,則返回 NULL 值。

語法

以下是 MySQL DATE_SUB() 函式的語法:

DATE_SUB(date, INTERVAL expr unit);

引數

此方法接受 3 個引數。具體描述如下:

  • date 表示日期的值,可以是字串型別、DATE 型別(年、月、日)、DATETIME 型別(小時、分鐘或秒)或 TIMESTAMP 型別。

  • expr 表示間隔值。

  • unit 是由expr值表示的間隔型別,可以是 DAY、WEEK、MONTH、QUARTER、YEAR、HOUR、MINUTE、SECOND、MICROSECOND。

unit 可以是混合值,例如:SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH。

返回值

此函式返回從原始日期減去指定時間間隔後的新日期或 datetime 值。

示例

以下示例演示了DATE_SUB()函式的使用:

SELECT DATE_SUB('2015-09-05', INTERVAL 20 DAY);

輸出

獲得以下輸出:

DATE_SUB('2015-09-05', INTERVAL 20 DAY)
2015-08-16

示例

以下是此函式的另一個示例:

SELECT DATE_SUB('2008-01-02', INTERVAL 4 YEAR);

輸出

獲得以下輸出:

DATE_SUB('2008-01-02', INTERVAL 4 YEAR)
2004-01-02

示例

在以下示例中,我們為日期傳遞 DATETIME 值:

SELECT DATE_SUB('2018-05-23 20:40:32.88558', INTERVAL 3 WEEK);

輸出

獲得以下輸出:

DATE_SUB('2018-05-23 20:40:32.88558', INTERVAL 3 WEEK)
2018-05-02 20:40:32.885580

示例

我們還可以將負值作為引數傳遞給此函式:

SELECT DATE_SUB('2015-09-05', INTERVAL -20 DAY);

輸出

獲得以下輸出:

DATE_SUB('2015-09-05', INTERVAL -20 DAY)
2015-09-25

示例

以下示例演示了 DATE_SUB() 函式中可用各種單位的使用。

我們在以下查詢中使用 YEAR_MONTH 單位和 INTERVAL 表示式:

SELECT DATE_SUB('2021-03-22', INTERVAL '5-6 ' YEAR_MONTH );

獲得以下輸出:

DATE_SUB('2021-03-22', INTERVAL '5-6' YEAR_MONTH)
2015-09-22

我們在以下查詢中使用 WEEK 單位和 INTERVAL 表示式:

SELECT DATE_SUB('2021-03-22', INTERVAL '3' WEEK );

獲得以下輸出:

DATE_SUB('2021-03-22', INTERVAL '3' WEEK)
2021-03-01

我們在以下查詢中使用 QUARTER 單位和 INTERVAL 表示式:

SELECT DATE_SUB('2021-03-22', INTERVAL '3' QUARTER );

獲得以下輸出:

DATE_SUB('2021-03-22', INTERVAL '3' QUARTER)
2020-06-22

我們在以下查詢中使用 MINUTE_MICROSECOND 單位和 INTERVAL 表示式:

SELECT DATE_SUB('2021-03-22', INTERVAL '10:09.2362191' MINUTE_MICROSECOND);

獲得以下輸出:

DATE_SUB('2021-03-22', INTERVAL '10:09.2362191' MINUTE_MICROSECOND)
2021-03-21 23:49:48.637809

我們在以下查詢中使用 SECOND_MICROSECOND 單位和 INTERVAL 表示式:

SELECT DATE_SUB('2021-03-22', INTERVAL '10.2362191' SECOND_MICROSECOND);

獲得以下輸出:

DATE_SUB('2021-03-22', INTERVAL '10.2362191' SECOND_MICROSECOND)
2021-03-21 23:59:47.637809

我們在以下查詢中使用 MINUTE_SECOND 單位和 INTERVAL 表示式:

SELECT DATE_SUB('2021-03-22', INTERVAL '10.21' MINUTE_SECOND);

獲得以下輸出:

DATE_SUB('2021-03-22', INTERVAL '10.21' MINUTE_SECOND)
2021-03-21 23:49:39

示例

讓我們使用 CREATE TABLE 語句在 MySQL 資料庫中建立一個名為 SALES 的表,如下所示:

CREATE TABLE SALES(
   ID INT,
   ProductName VARCHAR(255),
   CustomerName VARCHAR(255),
   DispatchDate date,
   DispatchTime time,
   Price INT,
   Location VARCHAR(255)
);

現在,我們將使用 INSERT 語句在 SALES 表中插入 5 條記錄:

INSERT INTO SALES VALUES 
(1, 'Keyboard', 'Rob', DATE('2019-09-01'), TIME('11:00:00'), 7000, 'Hyderabad'),
(2, 'Earphones', 'John', DATE('2019-05-01'), TIME('11:00:00'), 2000, 'Vizag'),
(3, 'Mouse', 'Jane', DATE('2019-03-01'), TIME('10:59:59'), 3000, 'Vijayawada'),
(4, 'Mobile', 'Sam', DATE('2019-03-01'), TIME('10:10:52'), 9000, 'Chennai'),
(5, 'Headset', 'Sara', DATE('2019-04-06'), TIME('11:08:59'), 6000, 'Goa');

以下查詢將 25 個季度從DispatchDate列的實體中減去:

SELECT ProductName, CustomerName, DispatchDate, Price,
DATE_SUB(DispatchDate, INTERVAL -25 QUARTER) AS DATE_SUB 
FROM SALES;

輸出

輸出顯示如下:

產品名稱 客戶名稱 發貨日期 價格 DATE_SUB
鍵盤 Rob 2019-09-01 7000 2025-12-01
耳機 John 2019-05-01 2000 2025-08-01
滑鼠 Jane 2019-03-01 3000 2025-06-01
手機 Sam 2019-03-01 9000 2025-06-01
耳機 Sara 2019-04-06 6000 2025-07-06
廣告