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
DATEDIFFchỉ 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.