Tag et kig på TIMESTAMPDIFF() funktion i MySQL.
Hvad dette giver dig mulighed for er at bestå i to TIMESTAMP
eller DATETIME
værdier (eller endda DATE
som MySQL automatisk konverterer) samt den tidsenhed, du vil basere din forskel på.
Du kan angive MONTH
som enhed i den første parameter:
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 som udgangspunkt det antal måneder, der er forløbet fra den første dato i parameterlisten. Denne løsning tager højde for det varierende antal dage i hver måned (28,30,31) samt skudår.
Hvis du vil have decimalpræcision i antallet af forløbne måneder, er det lidt mere kompliceret, men her er hvordan du kan gøre 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
)
Hvor startdate
og enddate
er dine datoparametre, uanset om det er fra to datokolonner i en tabel eller som inputparametre fra et script:
Eksempler:
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