Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tính chênh lệch ngày giữa hai TIMESTAMP trong MySQL (DATEDIFF)


Sử dụng hàm DATEDIFF(date1, date2) trả về số ngày chênh lệch (date1 - date2). Chỉ tính phần ngày, bỏ qua giờ.

Cú pháp

SELECT DATEDIFF(date_column1, date_column2) AS days_diff FROM table_name;

Ví dụ minh họa

mysql> CREATE TABLE DifferenceTimestamp (
  IssueTime TIMESTAMP, DueTime TIMESTAMP
);
Query OK, 0 rows affected (0.66 sec)

mysql> INSERT INTO DifferenceTimestamp VALUES
(NOW(), DATE_ADD(NOW(), INTERVAL -30 DAY)),
(NOW(), DATE_ADD(NOW(), INTERVAL -24 DAY)),
(NOW(), DATE_ADD(NOW(), INTERVAL -5 DAY));
Query OK, 3 rows affected

Dữ liệu (giả sử NOW = 2018-12-07):

+---------------------+---------------------+
| IssueTime           | DueTime             |
+---------------------+---------------------+
| 2018-12-07 17:48:28 | 2018-11-07 17:48:28 |
| 2018-12-07 17:48:40 | 2018-11-13 17:48:40 |
| 2018-12-07 17:48:46 | 2018-12-02 17:48:46 |
+---------------------+---------------------+

Tính chênh lệch:

mysql> SELECT DATEDIFF(IssueTime, DueTime) AS DifferenceInTimestampDays 
FROM DifferenceTimestamp;

Kết quả:

+---------------------------+
| DifferenceInTimestampDays |
+---------------------------+
| 30                        |
| 24                        |
| 5                         |
+---------------------------+

Lưu ý quan trọng

  • DATEDIFF chỉ so sánh phần ngày, bỏ qua giờ/phút/giây.
  • DATEDIFF('2018-12-07 23:59', '2018-12-07 00:01') = 0 (cùng ngày).
  • Kết quả có thể âm nếu date1 < date2.

Tính chênh lệch chính xác đến giây/phút

-- Giây
SELECT TIMESTAMPDIFF(SECOND, DueTime, IssueTime) AS sec_diff FROM DifferenceTimestamp;

-- Phút
SELECT TIMESTAMPDIFF(MINUTE, DueTime, IssueTime) AS min_diff FROM DifferenceTimestamp;

-- Giờ
SELECT TIMESTAMPDIFF(HOUR, DueTime, IssueTime) AS hour_diff FROM DifferenceTimestamp;

TIMESTAMPDIFF(unit, start, end) chính xác và linh hoạt hơn.