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')
-- 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
Het krijgt in feite het aantal maanden dat is verstreken vanaf de eerste datum in de parameterlijst. Deze oplossing houdt rekening met het variërende aantal dagen in elke maand (28,30,31) en schrikkeljaren.
Als u decimale precisie wilt in het aantal verstreken maanden, is het een beetje ingewikkelder, maar hier is hoe u 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