共計 4064 個字符,預計需要花費 11 分鐘才能閱讀完成。
這篇文章主要介紹了 mysql 如何求時間差,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
mysql 求時間差的方法:1、使用 TIMEDIFF()函數,語法“TIMEDIFF(dt1, dt2);”;2、使用 IMESTAMPDIFF()函數,語法“TIMESTAMPDIFF(unit,begin,end);
”。
本教程操作環境:windows7 系統、mysql8 版本、Dell G3 電腦。
mysql 求時間差
timediff()函數 – 計算兩個 TIME 或 DATETIME 值之間的差值。
timestampdiff()函數 – 計算兩個 DATE 或 DATETIME 值之間的差值。
MySQL TIMEDIFF 函數介紹
TIMEDIFF 返回兩個 TIME 或 DATETIME 值之間的差值。請參閱 TIMEDIFF 函數的以下語法。
TIMEDIFF(dt1, dt2);
TIMEDIFF 函數接受兩個必須為相同類型的參數,即 TIME 或 DATETIME。TIMEDIFF 函數返回表示為時間值的 dt1 – dt2 的結果。
因為 TIMEDIFF 函數返回 TIME 值,所以其結果被限制在從 -838:59:59 到 838:59:59 的 TIME 值范圍內。
MySQL TIMEDIFF 函數示例
讓我們舉一個例子來計算兩個時間值之間的差異。
mysql SELECT TIMEDIFF(12:00:00 , 10:00:00) diff;
+----------+
| diff |
+----------+
| 02:00:00 |
+----------+
1 row in set
在這個例子中,我們計算了 12:00:00 和 10:00:00 之間的差值為:02:00:00。
以下示例計算兩個 DATETIME 值之間的差異值:
mysql SELECT TIMEDIFF(2010-01-01 01:00:00 , 2010-01-02 01:00:00) diff;
+-----------+
| diff |
+-----------+
| -24:00:00 |
+-----------+
1 row in set
如果任一參數為 NULL,TIMEDIFF 函數將返回 NULL。
mysql SELECT TIMEDIFF(2010-01-01 ,NULL) diff;
+------+
| diff |
+------+
| NULL |
+------+
1 row in set, 1 warning (0.00 sec)
如果傳遞兩個不同類型的參數,一個是 DATETIME,另一個是 TIME,TIMEDIFF 函數也返回 NULL。
mysql SELECT TIMEDIFF(2010-01-01 10:00:00 , 10:00:00) diff;
+------+
| diff |
+------+
| NULL |
+------+
1 row in set
MySQL TIMESTAMPDIFF 函數簡介
下面說明了 TIMESTAMPDIFF 函數的語法。
TIMESTAMPDIFF(unit,begin,end);
TIMESTAMPDIFF 函數返回 begin-end 的結果,其中 begin 和 end 是 DATE 或 DATETIME 表達式。
TIMESTAMPDIFF 函數允許其參數具有混合類型,例如,begin 是 DATE 值,end 可以是 DATETIME 值。如果使用 DATE 值,則 TIMESTAMPDIFF 函數將其視為時間部分為“00:00:00”的 DATETIME 值。
unit 參數是確定 (end-begin) 的結果的單位,表示為整數。以下是有效單位:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
MySQL TIMESTAMPDIFF 函數示例
以下示例將以月份值的形式返回 2018-01-01 和 2018-06-01 的差值:
mysql SELECT TIMESTAMPDIFF(MONTH, 2018-01-01 , 2018-06-01) result;
+--------+
| result |
+--------+
| 5 |
+--------+
1 row in set
如果您希望看到差值,只需要將 unit 參數從 MONTH 更改為 DAY,如下所示:
mysql SELECT TIMESTAMPDIFF(DAY, 2010-01-01 , 2010-06-01) result;
+--------+
| result |
+--------+
| 151 |
+--------+
1 row in set
以下語句返回兩個 DATETIME 值 (以分鐘為單位) 的差異值:
mysql SELECT TIMESTAMPDIFF(MINUTE, 2018-01-01 10:00:00 , 2018-01-01 10:45:00) result;
+--------+
| result |
+--------+
| 45 |
+--------+
1 row in set
請注意,TIMESTAMPDIFF 僅考慮與 unit 參數相關的時間部分。請參閱以下示例:
mysql SELECT TIMESTAMPDIFF(MINUTE, 2018-01-01 10:00:00 , 2018-01-01 10:45:59) result;
+--------+
| result |
+--------+
| 45 |
+--------+
1 row in set
差值應該是 45 分 59 秒。但是,我們將 unit 參數傳遞為 MINUTE,因此,函數按預期返回 45 分鐘。
如果使用 SECOND 而不是 MINUTE,則 TIMESTAMPDIFF 函數將考慮 SECOND 部分,如以下示例所示:
mysql SELECT TIMESTAMPDIFF(SECOND, 2018-01-01 10:00:00 , 2018-01-01 10:45:59) result;
+--------+
| result |
+--------+
| 2759 |
+--------+
1 row in set
注:45 分 59 秒 = 45×60 + 59(秒)= 2759 秒
使用 MySQL TIMESTAMPDIFF 函數計算年齡
首先,我們創建一個名為 persons 的新表,用于演示。
USE testdb;
CREATE TABLE persons (
id INT AUTO_INCREMENT PRIMARY KEY,
full_name VARCHAR(255) NOT NULL,
date_of_birth DATE NOT NULL
);
其次,向 persons 表中插入一些行:
INSERT INTO persons(full_name, date_of_birth)
VALUES(John Doe , 1990-01-01),
(David Taylor , 1989-06-06),
(Peter Drucker , 1985-03-02),
(Lily Minsu , 1992-05-05),
(Mary William , 1995-12-01
第三步,使用 TIMESTAMPDIFF 來計算 persons 表中每個人的年齡:
SELECT
id,
full_name,
date_of_birth,
TIMESTAMPDIFF(YEAR,
date_of_birth,
2018-01-01 ) age
persons;
執行上面查詢語句,得到以下結果 –
+----+---------------+---------------+-----+
| id | full_name | date_of_birth | age |
+----+---------------+---------------+-----+
| 1 | John Doe | 1990-01-01 | 28 |
| 2 | David Taylor | 1989-06-06 | 28 |
| 3 | Peter Drucker | 1985-03-02 | 32 |
| 4 | Lily Minsu | 1992-05-05 | 25 |
| 5 | Mary William | 1995-12-01 | 22 |
+----+---------------+---------------+-----+
5 rows in set
在此語句中,我們計算到 2018-01-01 日為止的年齡。如果要計算當前年齡,可以通過 NOW 函數替換字面值 2018-01-01,如下所示:
SELECT
id,
full_name,
date_of_birth,
TIMESTAMPDIFF(YEAR,
date_of_birth,
NOW()) age
persons;
執行上面查詢語句,得到以下結果 –
+----+---------------+---------------+-----+
| id | full_name | date_of_birth | age |
+----+---------------+---------------+-----+
| 1 | John Doe | 1990-01-01 | 27 |
| 2 | David Taylor | 1989-06-06 | 28 |
| 3 | Peter Drucker | 1985-03-02 | 32 |
| 4 | Lily Minsu | 1992-05-05 | 25 |
| 5 | Mary William | 1995-12-01 | 21 |
+----+---------------+---------------+-----+
5 rows in set
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“mysql 如何求時間差”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!