mysql TIMESTAMPDIFF函數


下面說明了TIMESTAMPDIFF函數的語法。

TIMESTAMPDIFF(unit,begin,end); 

TIMESTAMPDIFF函數返回begin-end的結果,其中beginendDATEDATETIME表達式。

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

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

  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR

MySQL TIMESTAMPDIFF函數示例

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

  1.  
    mysql> SELECT TIMESTAMPDIFF(MONTH, '2018-01-01', '2018-06-01') result;
  2.  
    + --------+
  3.  
    | result |
  4.  
    + --------+
  5.  
    | 5 |
  6.  
    + --------+
  7.  
    1 row in set

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

  1.  
    mysql> SELECT TIMESTAMPDIFF(DAY, '2010-01-01', '2010-06-01') result;
  2.  
    + --------+
  3.  
    | result |
  4.  
    + --------+
  5.  
    | 151 |
  6.  
    + --------+
  7.  
    1 row in set

以下語句返回兩個DATETIME值(以分鍾為單位)的差異值:

  1.  
    mysql> SELECT TIMESTAMPDIFF(MINUTE, '2018-01-01 10:00:00', '2018-01-01 10:45:00') result;
  2.  
    + --------+
  3.  
    | result |
  4.  
    + --------+
  5.  
    | 45 |
  6.  
    + --------+
  7.  
    1 row in set

請注意,TIMESTAMPDIFF僅考慮與unit參數相關的時間部分。 請參閱以下示例:

  1.  
    mysql> SELECT TIMESTAMPDIFF(MINUTE, '2018-01-01 10:00:00', '2018-01-01 10:45:59') result;
  2.  
    + --------+
  3.  
    | result |
  4.  
    + --------+
  5.  
    | 45 |
  6.  
    + --------+
  7.  
    1 row in set

差值應該是45分59秒。 但是,我們將unit參數傳遞為MINUTE,因此,函數按預期返回45分鍾。

如果使用SECOND而不是MINUTE,則TIMESTAMPDIFF函數將考慮SECOND部分,如以下示例所示:

  1.  
    mysql> SELECT TIMESTAMPDIFF(SECOND, '2018-01-01 10:00:00', '2018-01-01 10:45:59') result;
  2.  
    + --------+
  3.  
    | result |
  4.  
    + --------+
  5.  
    | 2759 |
  6.  
    + --------+
  7.  
    1 row in set

 

注:45分59秒= 45×60 + 59(秒)= 2759秒

使用MySQL TIMESTAMPDIFF函數計算年齡

首先,我們創建一個名為persons的新表,用於演示。

  1.  
    USE testdb;
  2.  
    CREATE TABLE persons (
  3.  
    id INT AUTO_INCREMENT PRIMARY KEY,
  4.  
    full_name VARCHAR(255) NOT NULL,
  5.  
    date_of_birth DATE NOT NULL
  6.  
    );

其次,向persons表中插入一些行:

  1.  
    INSERT INTO persons(full_name, date_of_birth)
  2.  
    VALUES('John Doe', '1990-01-01'),
  3.  
    ( 'David Taylor', '1989-06-06'),
  4.  
    ( 'Peter Drucker', '1985-03-02'),
  5.  
    ( 'Lily Minsu', '1992-05-05'),
  6.  
    ( 'Mary William', '1995-12-01');

第三步,使用TIMESTAMPDIFF來計算persons表中每個人的年齡:

  1.  
    SELECT
  2.  
    id,
  3.  
    full_name,
  4.  
    date_of_birth,
  5.  
    TIMESTAMPDIFF(YEAR,
  6.  
    date_of_birth,
  7.  
    '2018-01-01') age
  8.  
    FROM
  9.  
    persons;

執行上面查詢語句,得到以下結果 -

  1.  
    +----+---------------+---------------+-----+
  2.  
    | id | full_name | date_of_birth | age |
  3.  
    +----+---------------+---------------+-----+
  4.  
    | 1 | John Doe | 1990-01-01 | 28 |
  5.  
    | 2 | David Taylor | 1989-06-06 | 28 |
  6.  
    | 3 | Peter Drucker | 1985-03-02 | 32 |
  7.  
    | 4 | Lily Minsu | 1992-05-05 | 25 |
  8.  
    | 5 | Mary William | 1995-12-01 | 22 |
  9.  
    +----+---------------+---------------+-----+
  10.  
    5 rows in set

在此語句中,我們計算到2018-01-01日為止的年齡。如果要計算當前年齡,可以通過NOW函數替換字面值'2018-01-01',如下所示:

  1.  
    SELECT
  2.  
    id,
  3.  
    full_name,
  4.  
    date_of_birth,
  5.  
    TIMESTAMPDIFF(YEAR,
  6.  
    date_of_birth,
  7.  
    NOW()) age
  8.  
    FROM
  9.  
    persons;

執行上面查詢語句,得到以下結果 -

  1.  
    + ----+---------------+---------------+-----+
  2.  
    | id | full_name | date_of_birth | age |
  3.  
    + ----+---------------+---------------+-----+
  4.  
    | 1 | John Doe | 1990-01-01 | 27 |
  5.  
    | 2 | David Taylor | 1989-06-06 | 28 |
  6.  
    | 3 | Peter Drucker | 1985-03-02 | 32 |
  7.  
    | 4 | Lily Minsu | 1992-05-05 | 25 |
  8.  
    | 5 | Mary William | 1995-12-01 | 21 |
  9.  
    + ----+---------------+---------------+-----+
  10.  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM