sql >> Database >  >> RDS >> Mysql

Hoe het verschil tussen twee datums in maanden in MySQL te berekenen

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


  1. Voor Nvarchar (Max) krijg ik maar 4000 tekens in TSQL?

  2. Converteer datetime-waarde naar tekenreeks

  3. Tabel wijzigen in Oracle

  4. Hoe om te gaan met BOB-uitzonderingen