sql >> Databasteknik >  >> RDS >> Mysql

Skillnaden i månader mellan datum i MySQL

Månadsskillnad mellan två givna datum:

Jag är förvånad över att detta inte har nämnts ännu:

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 enhet i den första parametern:

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- Outputs: 0
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
-- Outputs: 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
-- Outputs: 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
-- Outputs: 7

Den får i princip antalet månader som har gått från det första datumet i parameterlistan. Den här lösningen kompenserar automatiskt för det varierande antalet dagar i varje månad (28,30,31) samt tar hänsyn till skottår – du behöver inte oroa dig för något av det.

Månadsskillnad med precision:

Det är lite mer komplicerat om du vill införa decimalprecision i antal månader som förflutit, 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. SQL Server saknas index

  2. Få kolumninformation för en tabell eller vy i SQL Server (T-SQL:sp_columns)

  3. Formatera SQLite-frågeresultat som en kommaseparerad lista

  4. 10 tidsbesparande genvägar i Microsoft Access