sql >> Base de Datos >  >> RDS >> Mysql

Cómo calcular la diferencia entre dos fechas en meses en MySQL

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