Differenza di mese tra due date date:
Sono sorpreso che questo non sia stato ancora menzionato:
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')
-- 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
Fondamentalmente ottiene il numero di mesi trascorsi dalla prima data nell'elenco dei parametri. Questa soluzione compensa automaticamente il numero variabile di giorni in ogni mese (28,30,31) e tiene conto degli anni bisestili:non devi preoccuparti di nulla di tutto ciò.
Differenza mensile con precisione:
È un po' più complicato se vuoi introdurre la precisione decimale nel numero di mesi trascorsi, 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