Eche un vistazo a TIMESTAMPDIFF() función en MySQL.
Lo que esto le permite hacer es pasar dos TIMESTAMP
o DATETIME
valores (o incluso DATE
ya que MySQL se convertirá automáticamente), así como la unidad de tiempo en la que desea basar su diferencia.
Puede especificar MONTH
como la unidad en el primer parámetro:
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
Básicamente obtiene el número de meses transcurridos desde la primera fecha en la lista de parámetros. Esta solución tiene en cuenta la cantidad variable de días de cada mes (28, 30, 31), así como los años bisiestos.
Si desea precisión decimal en la cantidad de meses transcurridos, es un poco más complicado, pero así es como puede hacerlo:
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
)
Donde startdate
y enddate
son sus parámetros de fecha, ya sea de dos columnas de fecha en una tabla o como parámetros de entrada de un script:
Ejemplos:
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