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