資料庫

MySQL/MariaDB 資料庫時間相加、相減計算函數教學與範例

介紹 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(時間單位, 添加值, 原時間戳記)

其中可用的時間單位MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR,以下是簡單的範例:

-- 加上 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 官方文件

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

10 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

10 個月 ago