Hàm TIMESTAMPDIFF() cho phép tính khoảng cách giữa 2 ngày theo đơn vị mong muốn (ngày, tháng, năm...). Kết hợp ABS() để luôn lấy giá trị dương bất kể thứ tự 2 ngày.
Cú pháp
TIMESTAMPDIFF(DON_VI, ngay_bat_dau, ngay_ket_thuc)
Các đơn vị: MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR.
Ví dụ minh họa
Tạo bảng 2 cột ngày:
CREATE TABLE DemoTable (Date1 DATE, Date2 DATE);
INSERT INTO DemoTable VALUES
('2017-01-10', '2017-12-10'),
('2018-12-31', '2015-01-02'),
('2020-03-01', '2019-06-15');
Tính chênh lệch tháng (giá trị tuyệt đối):
SELECT ABS(TIMESTAMPDIFF(MONTH, Date1, Date2)) AS KhoangCachThang FROM DemoTable;
Kết quả
| Date1 | Date2 | KhoangCachThang |
|---|---|---|
| 2017-01-10 | 2017-12-10 | 11 |
| 2018-12-31 | 2015-01-02 | 47 |
| 2020-03-01 | 2019-06-15 | 8 |
Lưu ý quan trọng
TIMESTAMPDIFFtính theo ranh giới đơn vị, không phải 30 ngày chính xác. Ví dụ: 2017-01-31 đến 2017-02-01 = 1 tháng (qua ranh giới tháng), nhưng 2017-01-01 đến 2017-01-31 = 0 tháng.- Thứ tự tham số quan trọng:
TIMESTAMPDIFF(unit, start, end). Nếustart > end, kết quả âm → dùngABS(). - Khác với
DATEDIFF()chỉ trả về số ngày.
So sánh với DATEDIFF
-- Số ngày chính xác
SELECT DATEDIFF('2017-12-10', '2017-01-10'); -- 334
-- Số tháng (theo ranh giới tháng)
SELECT TIMESTAMPDIFF(MONTH, '2017-01-10', '2017-12-10'); -- 11