溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql如何求時(shí)間差

發(fā)布時(shí)間:2021-12-28 09:36:57 來源:億速云 閱讀:328 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章主要介紹了mysql如何求時(shí)間差,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

mysql求時(shí)間差的方法:1、使用TIMEDIFF()函數(shù),語(yǔ)法“TIMEDIFF(dt1, dt2);”;2、使用IMESTAMPDIFF()函數(shù),語(yǔ)法“TIMESTAMPDIFF(unit,begin,end);”。

本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。

mysql求時(shí)間差

  • timediff()函數(shù) - 計(jì)算兩個(gè)TIME或DATETIME值之間的差值。

  • timestampdiff()函數(shù) - 計(jì)算兩個(gè)DATE或DATETIME值之間的差值。

MySQL TIMEDIFF函數(shù)介紹

TIMEDIFF返回兩個(gè)TIMEDATETIME值之間的差值。 請(qǐng)參閱TIMEDIFF函數(shù)的以下語(yǔ)法。

TIMEDIFF(dt1, dt2);

TIMEDIFF函數(shù)接受兩個(gè)必須為相同類型的參數(shù),即TIMEDATETIME。 TIMEDIFF函數(shù)返回表示為時(shí)間值的dt1 - dt2的結(jié)果。

因?yàn)?code>TIMEDIFF函數(shù)返回TIME值,所以其結(jié)果被限制在從-838:59:59838:59:59TIME值范圍內(nèi)。

MySQL TIMEDIFF函數(shù)示例

讓我們舉一個(gè)例子來計(jì)算兩個(gè)時(shí)間值之間的差異。

mysql> SELECT TIMEDIFF('12:00:00','10:00:00') diff;
+----------+
| diff     |
+----------+
| 02:00:00 |
+----------+
1 row in set

在這個(gè)例子中,我們計(jì)算了12:00:0010:00:00之間的差值為:02:00:00。

以下示例計(jì)算兩個(gè)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

如果任一參數(shù)為NULLTIMEDIFF函數(shù)將返回NULL。

mysql> SELECT TIMEDIFF('2010-01-01',NULL) diff;
+------+
| diff |
+------+
| NULL |
+------+
1 row in set, 1 warning (0.00 sec)

如果傳遞兩個(gè)不同類型的參數(shù),一個(gè)是DATETIME,另一個(gè)是TIME,TIMEDIFF函數(shù)也返回NULL。

mysql> SELECT TIMEDIFF('2010-01-01 10:00:00','10:00:00') diff;
+------+
| diff |
+------+
| NULL |
+------+
1 row in set

MySQL TIMESTAMPDIFF函數(shù)簡(jiǎn)介

下面說明了TIMESTAMPDIFF函數(shù)的語(yǔ)法。

TIMESTAMPDIFF(unit,begin,end);

TIMESTAMPDIFF函數(shù)返回begin-end的結(jié)果,其中beginendDATEDATETIME表達(dá)式。

TIMESTAMPDIFF函數(shù)允許其參數(shù)具有混合類型,例如,beginDATE值,end可以是DATETIME值。 如果使用DATE值,則TIMESTAMPDIFF函數(shù)將其視為時(shí)間部分為“00:00:00”DATETIME值。

unit參數(shù)是確定(end-begin)的結(jié)果的單位,表示為整數(shù)。 以下是有效單位:

  • MICROSECOND

  • SECOND

  • MINUTE

  • HOUR

  • DAY

  • WEEK

  • MONTH

  • QUARTER

  • YEAR

MySQL TIMESTAMPDIFF函數(shù)示例

以下示例將以月份值的形式返回2018-01-012018-06-01的差值:

mysql> SELECT TIMESTAMPDIFF(MONTH, '2018-01-01', '2018-06-01') result;
+--------+
| result |
+--------+
|      5 |
+--------+
1 row in set

如果您希望看到差值,只需要將unit參數(shù)從MONTH更改為DAY,如下所示:

mysql> SELECT TIMESTAMPDIFF(DAY, '2010-01-01', '2010-06-01') result;
+--------+
| result |
+--------+
|    151 |
+--------+
1 row in set

以下語(yǔ)句返回兩個(gè)DATETIME值(以分鐘為單位)的差異值:

mysql> SELECT TIMESTAMPDIFF(MINUTE, '2018-01-01 10:00:00', '2018-01-01 10:45:00') result;
+--------+
| result |
+--------+
|     45 |
+--------+
1 row in set

請(qǐng)注意,TIMESTAMPDIFF僅考慮與unit參數(shù)相關(guān)的時(shí)間部分。 請(qǐng)參閱以下示例:

mysql> SELECT TIMESTAMPDIFF(MINUTE, '2018-01-01 10:00:00', '2018-01-01 10:45:59') result;
+--------+
| result |
+--------+
|     45 |
+--------+
1 row in set

差值應(yīng)該是45分59秒。 但是,我們將unit參數(shù)傳遞為MINUTE,因此,函數(shù)按預(yù)期返回45分鐘。

如果使用SECOND而不是MINUTE,則TIMESTAMPDIFF函數(shù)將考慮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函數(shù)計(jì)算年齡

首先,我們創(chuàng)建一個(gè)名為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來計(jì)算persons表中每個(gè)人的年齡:

SELECT 
    id,
    full_name,
    date_of_birth,
    TIMESTAMPDIFF(YEAR,
        date_of_birth,
        '2018-01-01') age
FROM
    persons;

執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果 -

+----+---------------+---------------+-----+
| 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

在此語(yǔ)句中,我們計(jì)算到2018-01-01日為止的年齡。如果要計(jì)算當(dāng)前年齡,可以通過NOW函數(shù)替換字面值'2018-01-01',如下所示:

SELECT 
    id,
    full_name,
    date_of_birth,
    TIMESTAMPDIFF(YEAR,
        date_of_birth,
        NOW()) age
FROM
    persons;

執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果 -

+----+---------------+---------------+-----+
| 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

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“mysql如何求時(shí)間差”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI