sql >> Database teknologi >  >> RDS >> Mysql

Forskellen i måneder mellem datoer i MySQL

Månedsforskel mellem to givne datoer:

Jeg er overrasket over, at dette ikke er blevet nævnt endnu:

Tag et kig på TIMESTAMPDIFF() funktion i MySQL.

Hvad dette giver dig mulighed for er at bestå i to TIMESTAMP eller DATETIME værdier (eller endda DATE som MySQL automatisk konverterer) samt den tidsenhed, du vil basere din forskel på.

Du kan angive MONTH som enhed i den første 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

Den får som udgangspunkt det antal måneder, der er forløbet fra den første dato i parameterlisten. Denne løsning kompenserer automatisk for det varierende antal dage i hver måned (28,30,31) samt tager højde for skudår – du behøver ikke bekymre dig om noget af det.

Månedsforskel med præcision:

Det er lidt mere kompliceret, hvis du vil indføre decimalpræcision i antallet af forløbne måneder, men her er hvordan du kan gøre det:

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
  )

Hvor startdate og enddate er dine datoparametre, uanset om det er fra to datokolonner i en tabel eller som inputparametre fra et script:

Eksempler:

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. Returner ikke-numeriske værdier fra en PostgreSQL-databasekolonne

  2. Brug MySQL Relational Databases på CentOS 5

  3. SQL:Sorter efter prioritet, men sæt 0 til sidst

  4. Sådan tilføjes en kolonne i SQL