Maandverschil tussen twee gegeven datums:
Het verbaast me dat dit nog niet is genoemd:
Bekijk de TIMESTAMPDIFF() functie in MySQL.
Wat u hiermee kunt doen, is in twee TIMESTAMP
. doorgeven of DATETIME
waarden (of zelfs DATE
zoals MySQL automatisch zal converteren) evenals de tijdseenheid waarop u uw verschil wilt baseren.
U kunt MONTH
. specificeren als de eenheid in de eerste parameter:
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- Outputs: 0
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
-- Outputs: 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
-- Outputs: 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
-- Outputs: 7
Het krijgt in feite het aantal maanden dat is verstreken vanaf de eerste datum in de parameterlijst. Deze oplossing compenseert automatisch het variërende aantal dagen in elke maand (28,30,31) en houdt ook rekening met schrikkeljaren - u hoeft zich daar geen zorgen over te maken.
Maandverschil met precisie:
Het is een beetje ingewikkelder als je decimale precisie wilt invoeren in het aantal verstreken maanden, maar hier is hoe je het kunt doen:
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
)
Waar startdate
en enddate
zijn uw datumparameters, of het nu uit twee datumkolommen in een tabel is of als invoerparameters uit een script:
Voorbeelden:
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