在本教學中,您將學習如何使用MySQL DATE_ADD
函式將時間值新增到DATE
或DATETIME
值。
DATE_ADD
函式將間隔時間新增到DATE或DATETIME值。 下面說明了DATE_ADD
函式的語法:
DATE_ADD(start_date, INTERVAL expr unit);
DATE_ADD
函式有兩個引數:
start_date
是DATE
或DATETIME
的起始值。INTERVAL expr unit
是要新增到起始日期值的間隔值。根據引數,DATE_ADD
函式可能會返回一個DATETIME
值或一個字串:
DATETIME
- 如果第一個引數是DATETIME
值,或者如果間隔值具有時間元素,如小時,分鐘或秒等。我們來看幾個例子來了解DATE_ADD
函式的工作原理。
範例-1 加1
秒到時間: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
上加1
分1
秒。
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
上加-1
天5
小時。
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
間隔處理
在間隔期間 -
INTERVAL expr unit
expr
被視為一個字串,因此,當為expr
使用非字串值時,您應該小心。 例如,間隔為HOUR_MINUTE
,5/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
調整日,月或年
如果您將MONTH
,YEAR
或YEAR_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
函式將間隔新增到DATE
或DATETIME
值。