Ta en titt på TIMESTAMPDIFF() funktion i MySQL.
Vad detta låter dig göra är att passera på två TIMESTAMP
eller DATETIME
värden (eller till och med DATE
som MySQL kommer att konvertera automatiskt) samt den tidsenhet du vill basera din skillnad på.
Du kan ange MONTH
som enheten i den första parametern:
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
Den får i princip antalet månader som har gått från det första datumet i parameterlistan. Denna lösning står för det varierande antalet dagar i varje månad (28,30,31) såväl som skottår.
Om du vill ha decimalprecision i antal månader som förflutit är det lite mer komplicerat, men så här kan du göra det:
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
)
Där startdate
och enddate
är dina datumparametrar, oavsett om det är från två datumkolumner i en tabell eller som inmatningsparametrar från ett skript:
Exempel:
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