Sehen Sie sich den TIMESTAMPDIFF() Funktion in MySQL.
Damit können Sie zwei TIMESTAMP
übergeben oder DATETIME
Werte (oder sogar DATE
da MySQL automatisch konvertiert) sowie die Zeiteinheit, auf der Sie Ihre Differenz basieren möchten.
Sie können MONTH
angeben als Einheit im ersten 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
Es erhält im Grunde die Anzahl der Monate, die seit dem ersten Datum in der Parameterliste vergangen sind. Diese Lösung berücksichtigt die unterschiedliche Anzahl von Tagen in jedem Monat (28, 30, 31) sowie Schaltjahre.
Wenn Sie eine Dezimalgenauigkeit in der Anzahl der verstrichenen Monate wünschen, ist es etwas komplizierter, aber hier ist, wie Sie es tun können:
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
)
Wobei startdate
und enddate
sind Ihre Datumsparameter, sei es aus zwei Datumsspalten in einer Tabelle oder als Eingabeparameter aus einem Skript:
Beispiele:
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