Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So berechnen Sie die Differenz zwischen zwei Daten in Monaten in MySQL

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