MySQL date_add()函數

在本教學中,您將學習如何使用MySQL DATE_ADD函數將時間值添加到DATEDATETIME值。

MySQL DATE_ADD函數簡介

DATE_ADD函數將間隔時間添加到DATEDATETIME值。 下麵說明了DATE_ADD函數的語法:

DATE_ADD(start_date, INTERVAL expr unit);

DATE_ADD函數有兩個參數:

  • start_dateDATEDATETIME的起始值。
  • INTERVAL expr unit是要添加到起始日期值的間隔值。

根據參數,DATE_ADD函數可能會返回一個DATETIME值或一個字串:

  • DATETIME - 如果第一個參數是DATETIME值,或者如果間隔值具有時間元素,如小時,分鐘或秒等。
  • 否則返回字串。

MySQL DATE_ADD函數示例

我們來看幾個例子來瞭解DATE_ADD函數的工作原理。

示例-11秒到時間:2017-12-31 23:59:59

mysql> SELECT DATE_ADD('2017-12-31 23:59:59', INTERVAL 1 SECOND) result;
+---------------------+
| result              |
+---------------------+
| 2018-01-01 00:00:00 |
+---------------------+
1 row in set

示例-2 - 添加1天到時間:2017-12-31 00:00:01

mysql> SELECT DATE_ADD('2017-12-31 00:00:01',INTERVAL 1 DAY) result;
+---------------------+
| result              |
+---------------------+
| 2018-01-01 00:00:01 |
+---------------------+
1 row in set

示例-3 - 在時間2017-12-31 23:59:59上加11秒。

mysql> SELECT DATE_ADD('2017-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND) result;
+---------------------+
| result              |
+---------------------+
| 2018-01-01 00:01:00 |
+---------------------+
1 row in set

示例-4 - 在時間2000-01-01 00:00:00上加-15小時。

mysql> SELECT DATE_ADD('2000-01-01 00:00:00', INTERVAL '-1 5' DAY_HOUR) result;
+---------------------+
| result              |
+---------------------+
| 1999-12-30 19:00:00 |
+---------------------+
1 row in set

示例-5 - 添加1秒和999999微秒到時間:2017-12-31 23:59:59.000002

mysql> SELECT DATE_ADD('2017-12-31 23:59:59.000002',INTERVAL '1.999999' SECOND_MICROSECOND) result;
+----------------------------+
| result                     |
+----------------------------+
| 2018-01-01 00:00:01.000001 |
+----------------------------+
1 row in set

MySQL DATE_ADD函數使用說明

間隔處理

在間隔期間 -

INTERVAL expr unit

expr被視為一個字串,因此,當為expr使用非字串值時,您應該小心。 例如,間隔為HOUR_MINUTE5/2求值結果為2.5000(不是2.5),並被視為2小時5000分鐘,如下面的語句所示:

mysql> SELECT DATE_ADD('2017-01-01', INTERVAL 5 / 2 HOUR_MINUTE) result;
+---------------------+
| result              |
+---------------------+
| 2017-01-04 13:20:00 |
+---------------------+
1 row in set

為了確保非串間隔值的正確解釋,您應該使用CAST函數,如下所示:

mysql> SELECT DATE_ADD('2017-01-01', INTERVAL CAST(6/4 AS DECIMAL(3,1)) HOUR_MINUTE) result;
+---------------------+
| result              |
+---------------------+
| 2017-01-01 01:05:00 |
+---------------------+
1 row in set

自動DATETIME轉換

如果您將時間值添加到日期值,則結果為DATETIME值,如以下示例所示:

mysql> SELECT DATE_ADD('2017-01-01', INTERVAL 12 HOUR) result;
+---------------------+
| result              |
+---------------------+
| 2017-01-01 12:00:00 |
+---------------------+
1 row in set

起始日期無效

如果對第一個參數使用無效的日期,DATE_ADD函數將返回NULL,例如:

mysql> SELECT DATE_ADD('2017-02-30', INTERVAL 1 DAY) result;
+--------+
| result |
+--------+
| NULL   |
+--------+
1 row in set

如果要詳細看到警告,請使用SHOW WARNINGS語句:

mysql> SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '2017-02-30' |
+---------+------+----------------------------------------+
1 row in set

調整日,月或年

如果您將MONTHYEARYEAR_MONTH的間隔添加到導致日期大於新月份的最大日期的日期,則該日期將被調整為新月份的最大日期。

請看看以下示例:

mysql> SELECT DATE_ADD('2017-01-30', INTERVAL 1 MONTH) result;
+------------+
| result     |
+------------+
| 2017-02-28 |
+------------+
1 row in set

在這個例子中,我們在2017年1月30日相加上了1個月,結果是2017年2月28日。這一天被調整到2017年2月的最大天數。

如果是2月份有29天,日期也將調整為第29天,如下所示:

mysql> SELECT DATE_ADD('2012-01-30', INTERVAL 1 MONTH) result;
+------------+
| result     |
+------------+
| 2012-02-29 |
+------------+
1 row in set

在本教學中,您已經學習了如何使用MySQL DATE_ADD函數將間隔添加到DATEDATETIME值。


上一篇: MySQL函數 下一篇: MySQL+Node.js連接和操作