MySQL date_add()函式

2019-10-16 22:55:03

在本教學中,您將學習如何使用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值。