Měsíční rozdíl mezi libovolnými dvěma daty:
Překvapuje mě, že to ještě nebylo zmíněno:
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')
-- 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
V podstatě získá počet měsíců uplynulých od prvního data v seznamu parametrů. Toto řešení automaticky kompenzuje různý počet dní v každém měsíci (28,30,31) a také zohledňuje přestupné roky – o nic z toho se nemusíte starat.
Měsíční rozdíl s přesností:
Je to trochu složitější, pokud chcete zavést desetinnou přesnost v počtu uplynulých měsíců, 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