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 值表示,可以是日、周、月、季度、年、小时、分钟、秒、微秒。
单位可以是混合值,例如:秒_微秒、分钟_微秒、分钟_秒HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH。
返回值
此函数返回原始日期减去指定时间间隔后的新日期或日期时间值。
示例
以下示例演示了 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');
以下查询将 DispatchDate 列的实体减去 25 个 QUARTER -
SELECT ProductName, CustomerName, DispatchDate, Price, DATE_SUB(DispatchDate, INTERVAL -25 QUARTER) AS DATE_SUB FROM SALES;
输出
输出显示如下 −
ProductName | CustomerName | DispatchDate | Price | DATE_SUB |
---|---|---|---|---|
Keyboard | Rob | 2019-09-01 | 7000 | 2025-12-01 |
Earphones | John | 2019-05-01 | 2000 | 2025-08-01 |
Mouse | Jane | 2019-03-01 | 3000 | 2025-06-01 |
Mobile | Sam | 2019-03-01 | 9000 | 2025-06-01 |
Headset | Sara | 2019-04-06 | 6000 | 2025-07-06 |