Mysql
 sql >> Database >  >> RDS >> Mysql

Come calcolare la differenza tra due date in mesi in MySQL

Dai un'occhiata a TIMESTAMPDIFF() funzione in MySQL.

Ciò che ti consente di fare è passare due TIMESTAMP o DATETIME valori (o anche DATE poiché MySQL eseguirà la conversione automatica) nonché l'unità di tempo su cui vuoi basare la tua differenza.

Puoi specificare MONTH come unità nel primo parametro:

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

Fondamentalmente ottiene il numero di mesi trascorsi dalla prima data nell'elenco dei parametri. Questa soluzione tiene conto del numero variabile di giorni in ogni mese (28,30,31) e degli anni bisestili.

Se vuoi la precisione decimale nel numero di mesi trascorsi, è un po' più complicato, ma ecco come puoi farlo:

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
  )

Dove startdate e enddate sono i tuoi parametri di data, che provengano da due colonne di data in una tabella o come parametri di input da uno script:

Esempi:

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