Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment calculer la différence entre deux dates en mois dans MySQL

Jetez un œil au TIMESTAMPDIFF() fonction dans MySQL.

Ce que cela vous permet de faire est de passer en deux TIMESTAMP ou DATETIME valeurs (ou même DATE comme MySQL se convertira automatiquement) ainsi que l'unité de temps sur laquelle vous souhaitez baser votre différence.

Vous pouvez spécifier MONTH comme unité dans le premier paramètre :

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

Il obtient essentiellement le nombre de mois écoulés depuis la première date de la liste des paramètres. Cette solution tient compte du nombre variable de jours de chaque mois (28,30,31) ainsi que des années bissextiles.

Si vous souhaitez une précision décimale dans le nombre de mois écoulés, c'est un peu plus compliqué, mais voici comment procéder :

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
  )

startdate et enddate sont vos paramètres de date, que ce soit à partir de deux colonnes de date dans une table ou en tant que paramètres d'entrée d'un script :

Exemples :

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