Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como calcular a diferença entre duas datas em meses no MySQL


Dê uma olhada no TIMESTAMPDIFF() função no MySQL.

O que isso permite que você faça é passar dois TIMESTAMP ou DATETIME valores (ou mesmo DATE como o MySQL irá converter automaticamente), bem como a unidade de tempo na qual você deseja basear sua diferença.

Você pode especificar MONTH como a unidade no primeiro 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

Ele basicamente obtém o número de meses decorridos desde a primeira data na lista de parâmetros. Essa solução leva em conta a quantidade variável de dias em cada mês (28,30,31), bem como os anos bissextos.

Se você deseja precisão decimal no número de meses decorridos, é um pouco mais complicado, mas aqui está como você pode fazer isso:
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
  )

Onde startdate e enddate são seus parâmetros de data, seja de duas colunas de data em uma tabela ou como parâmetros de entrada de um script:

Exemplos:
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