在本教學中,您將學習如何使用MySQL IMESTAMPDIFF
函式來計算兩個DATE
或DATETIME
值之間的差值。
下面說明了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
)的結果的單位,表示為整數。 以下是有效單位:
以下範例將以月份值的形式返回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
FROM
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
FROM
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
在寫這篇文章時,當前日期是:
2017-08-10
在本教學中,您學習了如何使用MySQL TIMESTAMPDIFF
函式來計算兩個DATE
或DATETIME
值之間的差值。