sql >> Databáze >  >> RDS >> Mysql

Jak vypočítat rozdíl mezi dvěma daty v měsících v MySQL

Podívejte se na TIMESTAMPDIFF() funkce v MySQL.

To vám umožní předat dva TIMESTAMP nebo DATETIME hodnoty (nebo dokonce DATE jak se MySQL automaticky převede) a také jednotku času, na které chcete založit svůj rozdíl.

Můžete zadat MONTH jako jednotka v prvním parametru:

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

V podstatě získá počet měsíců uplynulých od prvního data v seznamu parametrů. Toto řešení zohledňuje různý počet dní v každém měsíci (28,30,31) a také přestupné roky.

Pokud chcete desetinnou přesnost v počtu uplynulých měsíců, je to trochu složitější, ale můžete to udělat takto:

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
  )

Kde startdate a enddate jsou vaše parametry data, ať už ze dvou sloupců data v tabulce nebo jako vstupní parametry ze skriptu:

Příklady:

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. Jak mohu vložit dva dotazy do jednoho mysql_query?

  2. Jak interpretovat hodnotu txid_current() PosgreSQL

  3. Proč se dotaz neaktualizoval po kliknutí na tlačítko aktualizace?

  4. Vyberte (načtěte) všechny záznamy z více schémat pomocí Postgres