介紹 MySQL/MariaDB 資料庫中各種用於計算時間相加、相減的函數。
推算未來時間(時間相加)
ADDTIME 函數可以用來計算兩個時間的相加,語法如下:
ADDTIME(時間1, 時間2)
其中 時間1 的資料型態可以是 time 或是 datetime,而 時間2 的資料型態則必須為 time,以下是簡單的範例:
-- 時間相加 SELECT ADDTIME('14:20:30', '02:10:20');
+---------------------------------+
| ADDTIME('14:20:30', '02:10:20') |
+---------------------------------+
| 16:30:50 |
+---------------------------------+
-- 時間相加 SELECT ADDTIME('2019-11-05 14:20:30', '02:10:20');
+--------------------------------------------+
| ADDTIME('2019-11-05 14:20:30', '02:10:20') |
+--------------------------------------------+
| 2019-11-05 16:30:50 |
+--------------------------------------------+
TIMESTAMPADD 可用來添加一段時間間隔至既有的時間戳記(timestamp)中,其語法為:
TIMESTAMPADD(時間單位, 添加值, 原時間戳記)
其中可用的時間單位有 MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR,以下是簡單的範例:
-- 加上 3 小時 SELECT TIMESTAMPADD(HOUR, 3, '2019-11-05 14:20:30');
+----------------------------------------------+ | TIMESTAMPADD(HOUR, 3, '2019-11-05 14:20:30') | +----------------------------------------------+ | 2019-11-05 17:20:30 | +----------------------------------------------+
推算過去時間(時間相減)
SUBTIME 函數可以用來計算兩個時間的相減,語法跟 ADDTIME 類似:
SUBTIME(時間1, 時間2)
它會計算 時間1 減掉 時間2 的值,其中 時間1 的資料型態可以是 time 或是 datetime,而 時間2 的資料型態則必須為 time,以下是簡單的範例:
-- 時間相減 SELECT SUBTIME('14:20:30', '02:10:20');
+---------------------------------+
| SUBTIME('14:20:30', '02:10:20') |
+---------------------------------+
| 12:10:10 |
+---------------------------------+
-- 時間相減 SELECT SUBTIME('2019-11-05 14:20:30', '02:10:20');
+--------------------------------------------+
| SUBTIME('2019-11-05 14:20:30', '02:10:20') |
+--------------------------------------------+
| 2019-11-05 12:10:10 |
+--------------------------------------------+
計算間隔時間(時間相減)
TIMEDIFF 可用來計算兩個時間的間隔時間,其語法如下:
TIMEDIFF(時間1, 時間2)
它會計算 時間1 減掉 時間2 的值,其中 時間1 與 時間2 的資料型態可以是 time 或 datetime,以下是簡單的範例:
-- 計算間隔時間 SELECT TIMEDIFF('2019-11-13 12:33:26', '2019-11-05 14:20:30');
+--------------------------------------------------------+
| TIMEDIFF('2019-11-13 12:33:26', '2019-11-05 14:20:30') |
+--------------------------------------------------------+
| 190:12:56 |
+--------------------------------------------------------+
-- 計算間隔時間 SELECT TIMEDIFF('14:20:30', '12:33:26');
+----------------------------------+
| TIMEDIFF('14:20:30', '12:33:26') |
+----------------------------------+
| 01:47:04 |
+----------------------------------+
若 時間1 小於 時間2,則計算出來的結果就會是負的值:
-- 計算間隔時間 SELECT TIMEDIFF('2019-11-05 14:20:30', '2019-11-13 12:33:26');
+--------------------------------------------------------+
| TIMEDIFF('2019-11-05 14:20:30', '2019-11-13 12:33:26') |
+--------------------------------------------------------+
| -190:12:56 |
+--------------------------------------------------------+
TIMESTAMPDIFF 也可以用來計算時間間隔,不過它會將計算結果轉換為指定的單位:
TIMESTAMPDIFF(時間單位, 時間1, 時間2)
其可用的 時間單位 跟 TIMESTAMPADD 函數相同,以下是簡單的範例:
-- 計算間隔時間 SELECT TIMESTAMPDIFF(DAY,'2019-11-05 14:20:30', '2019-11-13 12:33:26');
+-----------------------------------------------------------------+ | TIMESTAMPDIFF(DAY,'2019-11-05 14:20:30', '2019-11-13 12:33:26') | +-----------------------------------------------------------------+ | 7 | +-----------------------------------------------------------------+
TIMESTAMPDIFF 在計算時是以 時間2 減掉 時間1,剛好跟 TIMEDIFF 相反。
參考資料:MySQL 官方文件

