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
)
Où 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