DATE_ADD() 與 DATE_SUB() 日期的加法與減法

DATE_ADD(date,INTERVAL expr unit)
DATE_SUB(date,INTERVAL expr unit)
  • date 傳入的日期
  • expr 傳入的表達式
  • unit 傳入的單位

這些函數執行日期運算。 date 是一個 DATETIME 或DATE值,用來指定起始時間的字串。expr 是一個表達式,用來指定從起始日期添加或減去的時間間隔值。對於負值的時間間隔,可以用『-』開頭。 unit 為關鍵詞,指定數值 expr 計算時的單位。
INTERVAL 只是 unit 的說明符號,不用太在意他。
type 建議的 expr 格式
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES.MICROSECONDS'
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MICROSECOND 'HOURS.MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_MICROSECOND 'DAYS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'

回傳值根據 date 參數:
  • 如果 date 參數是一個 DATE 值,而你的計算只會包括 YEAR、MONTH和DAY部分(沒有時間部分), 其結果是一個DATE 值。否則,結果將是一個 DATETIME 值。
  • 如果傳入的參數是 DATETIME或是TIMESTAMP格式,或是傳入DATE格式時,unit使用HOUR、MINUTE、SECOND,將回傳DATETIME格式。
  • 否則以字串格式回傳。

要確定回傳結果是 DATETIME 格式,可以用CAST()將參數 date 轉為DATETIME 格式。
MySQL 允許 expr 中使用任何標點符號。上表中所顯示的是建議的分隔符號。
日期運算也允許使用 INTERVAL 關鍵字與 + 或 - 的符號來進行。
date + INTERVAL expr unit
date - INTERVAL expr unit

如果位於另一端的表達式是一個日期或日期時間值,INTERVAL expr unit 關鍵字允許出現在『+』的兩端。但是只允許 INTERVAL expr unit 關鍵字允許出現在『-』的右邊,因為 INTERVAL expr unit 出現在『-』左邊計算結果是無意義的。
mysql> SELECT '1997-12-31 23:59:59' + INTERVAL 1 SECOND;
-> '1998-01-01 00:00:00'

mysql> SELECT INTERVAL 1 DAY + '1997-12-31';
-> '1998-01-01'

mysql> SELECT '1998-01-01' - INTERVAL 1 SECOND;
-> '1997-12-31 23:59:59'

mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
-> INTERVAL 1 SECOND);
-> '1998-01-01 00:00:00'

mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
-> INTERVAL 1 DAY);
-> '1998-01-01 23:59:59'

mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
-> INTERVAL '1:1' MINUTE_SECOND);
-> '1998-01-01 00:01:00'

mysql> SELECT DATE_SUB('1998-01-01 00:00:00',
-> INTERVAL '1 1:1:1' DAY_SECOND);
-> '1997-12-30 22:58:59'

mysql> SELECT DATE_ADD('1998-01-01 00:00:00',
-> INTERVAL '-1 10' DAY_HOUR);
-> '1997-12-30 14:00:00'

mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02'

mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002',
-> INTERVAL '1.999999' SECOND_MICROSECOND);
-> '1993-01-01 00:00:01.000001'

沒有留言: