MySQL DATE_SUB函数

时间:2019-11-20 08:52:22  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL DATE_SUB()函数从日期中减去时间值。

MySQL DATE_SUB函数简介

DATE_SUB()函数从DATE或DATETIME值中减去时间值(或间隔)。
下面说明了DATE_SUB()函数:

DATE_SUB(start_date,INTERVAL expr unit)

DATE_SUB()函数接受两个参数:

  • start_date是起始DATE或DATETIME值。

  • expr是一个字符串,它确定要从开始日期减去的间隔值。
    该单位是应解释expr的间隔单位,例如DAY,HOUR等。

以下语句使用DATE_SUB()函数从2017年7月4日减去1天:

SELECT DATE_SUB('2017-07-04',INTERVAL 1 DAY) result;
+------------+
| result     |
+------------+
| 2017-07-03 |
+------------+
1 row in set (0.00 sec)

在此示例中,开始日期是2017年7月4日,格式为yyyy-mm-dd。
间隔1天被解释为1天间隔。
DATE_SUB()函数的结果是一个字符串值,表示2017年7月3日

类似于DATE_ADD()函数,DATE_SUB()函数的返回值的数据类型可以是:

  • 如果第一个参数是DATETIME或时间间隔具有时间元素(例如小时,分钟,秒等),则为DATETIME值。

  • 否则为字符串。

请参见以下示例:

SELECT DATE_SUB('2017-07-04',INTERVAL 3 HOUR) result;

+---------------------+
| result              |
+---------------------+
| 2017-07-03 21:00:00 |
+---------------------+
1 row in set (0.00 sec)

因为间隔是3个小时,所以DATE_SUB函数的结果是DATETIME值。

MySQL DATE_SUB:负间隔

间隔中的expr可以为正或为负。
如果expr为负,则DATE_SUB()函数的行为类似于DATE_ADD()函数,如以下示例所示:

SELECT DATE_SUB('2017-07-03',INTERVAL -1 DAY) result;
+------------+
| result     |
+------------+
| 2017-07-04 |
+------------+
1 row in set (0.00 sec)

MySQL DATE_SUB:日期无效或格式错误

如果DATE_SUB()函数的第一个参数格式错误,无效日期或NULL,则DATE_SUB()函数将返回NULL。

SELECT DATE_SUB('2017-02-29', INTERVAL - 1 DAY) result;
+--------+
| result |
+--------+
| NULL   |
+--------+
1 row in set, 1 warning (0.00 sec)

在本示例中,2017-02-03是无效日期,因此结果为NULL。
另外,MySQL产生了警告。

SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '2017-02-29' |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)

以下示例演示了将格式错误的日期或NULL传递给DATE_SUB函数的影响:

SELECT DATE_SUB('03/07/2017', INTERVAL 1 DAY) result;
+--------+
| result |
+--------+
| NULL   |
+--------+
1 row in set, 1 warning (0.00 sec)

SELECT DATE_SUB(NULL, INTERVAL 1 DAY) result;
+--------+
| result |
+--------+
| NULL   |
+--------+
1 row in set (0.00 sec)

MySQL DATE_SUB:自动调整的日期

如果从日期中减去MONTH,YEAR或YEAR_MONTH的间隔,导致日期的日期大于新月的最大日期,则该日期将被调整为新月的最大日期。

考虑以下语句:

SELECT DATE_SUB('2017-03-30', INTERVAL 1 MONTH) result;
+------------+
| result     |
+------------+
| 2017-02-28 |
+------------+
1 row in set (0.00 sec)

在此示例中,我们从2017年3月30日减去1个月,因此结果为2017年2月28日。
日期被调整为28日而不是30日,因为2017年2月只有28天。

在本教程中,您学习了如何使用MySQL DATE_SUB()函数从DATE或DATETIME值中减去一个间隔。