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

Tính khoảng cách giữa 2 ngày theo tháng trong MySQL

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ả

Date1Date2KhoangCachThang
2017-01-102017-12-1011
2018-12-312015-01-0247
2020-03-012019-06-158

Lưu ý quan trọng

  • TIMESTAMPDIFF tí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ếu start > end, kết quả âm → dùng ABS().
  • 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