Spójrz na TIMESTAMPDIFF() funkcja w MySQL.
To, co pozwala ci to zrobić, to przekazać w dwóch TIMESTAMP
lub DATETIME
wartości (lub nawet DATE
ponieważ MySQL dokona automatycznej konwersji), a także jednostkę czasu, na której chcesz oprzeć swoją różnicę.
Możesz określić MONTH
jako jednostka w pierwszym parametrze:
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
Zasadniczo pobiera liczbę miesięcy, które upłynęły od pierwszej daty na liście parametrów. To rozwiązanie uwzględnia różną liczbę dni w każdym miesiącu (28,30,31), a także lata przestępne.
Jeśli potrzebujesz dokładności dziesiętnej w liczbie miesięcy, które upłynęły, jest to trochę bardziej skomplikowane, ale oto, jak możesz to zrobić:
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
)
Gdzie startdate
i enddate
są twoimi parametrami daty, niezależnie od tego, czy pochodzą z dwóch kolumn dat w tabeli, czy jako parametry wejściowe ze skryptu:
Przykłady:
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