sql >> Databasteknik >  >> RDS >> Mysql

Hur man beräknar skillnaden mellan två datum i månader i MySQL

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


  1. Skapa och distribuera flera versioner av databasen genom Schema Snapshots

  2. dBase Support är tillbaka i Microsoft Access!

  3. Hur uppdaterar jag en rad i en tabell eller infogar den om den inte finns?

  4. MySQL räkna kolumner på specifikt värde