Hãy xem TIMESTAMPDIFF () trong MySQL.
Điều này cho phép bạn làm là chuyển hai TIMESTAMP
hoặc DATETIME
giá trị (hoặc thậm chí DATE
vì MySQL sẽ tự động chuyển đổi) cũng như đơn vị thời gian bạn muốn dựa vào sự khác biệt của mình.
Bạn có thể chỉ định MONTH
làm đơn vị trong tham số đầu tiên:
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- 0
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
-- 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
-- 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
-- 7
Về cơ bản, nó lấy số tháng trôi qua kể từ ngày đầu tiên trong danh sách tham số. Giải pháp này tính đến lượng ngày khác nhau trong mỗi tháng (28,30,31) cũng như các năm nhuận.
Nếu bạn muốn có độ chính xác thập phân theo số tháng đã trôi qua, thì phức tạp hơn một chút, nhưng đây là cách bạn có thể làm điều đó:
SELECT
TIMESTAMPDIFF(MONTH, startdate, enddate) +
DATEDIFF(
enddate,
startdate + INTERVAL
TIMESTAMPDIFF(MONTH, startdate, enddate)
MONTH
) /
DATEDIFF(
startdate + INTERVAL
TIMESTAMPDIFF(MONTH, startdate, enddate) + 1
MONTH,
startdate + INTERVAL
TIMESTAMPDIFF(MONTH, startdate, enddate)
MONTH
)
Nơi startdate
và enddate
là các tham số ngày của bạn, cho dù đó là từ hai cột ngày trong bảng hay dưới dạng tham số đầu vào từ tập lệnh:
Ví dụ:
With startdate = '2012-05-05' AND enddate = '2012-05-27':
-- Outputs: 0.7097
With startdate = '2012-05-05' AND enddate = '2012-06-13':
-- Outputs: 1.2667
With startdate = '2012-02-27' AND enddate = '2012-06-02':
-- Outputs: 3.1935