月-任意の2つの日付の違い:
これがまだ言及されていないことに驚いています:
TIMESTAMPDIFF() MySQLで機能します。
これにより、2つのTIMESTAMP
を渡すことができます。 またはDATETIME
値(またはDATE
MySQLが自動変換するため)、および差の基礎となる時間の単位。
MONTH
を指定できます 最初のパラメータの単位として:
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
基本的に、パラメータリストの最初の日付から経過した月数を取得します。このソリューションは、うるう年を考慮に入れて、毎月のさまざまな日数(28、30、31)を自動的に補正します。そのようなことについて心配する必要はありません。
正確な月差:
経過した月数に小数精度を導入する場合は少し複雑ですが、その方法は次のとおりです。
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
)
startdate
およびenddate
テーブル内の2つの日付列からのものか、スクリプトからの入力パラメーターとしてかを問わず、日付パラメーターは次のとおりです。
例:
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