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'

沒有留言: