MySQLにはPERIOD_DIFF()
があります 2つの期間の違いを見つけることができる関数。ピリオドは2つの別個の引数として提供され、 YYMMの形式である必要があります。 またはYYYYMM 。
構文
構文は次のようになります:
PERIOD_DIFF(P1,P2)
ここでP1
は最初の期間であり、P2
2番目です。
この関数は日付を使用しているように見えますが、期間引数は実際には日付値ではないことに注意してください。
例1-基本的な使用法
これが基本的な例です。
SELECT PERIOD_DIFF(199906, 199905);
結果:
+-----------------------------+ | PERIOD_DIFF(199906, 199905) | +-----------------------------+ | 1 | +-----------------------------+
したがって、この場合、2つの期間の間に1か月の違いがあります。
例2–否定的な結果
これらの2つの期間を入れ替えるとどうなりますか。
SELECT PERIOD_DIFF(199905, 199906);
結果:
+-----------------------------+ | PERIOD_DIFF(199905, 199906) | +-----------------------------+ | -1 | +-----------------------------+
予想どおり、結果は負の値になります。
例3–2桁の年
2桁の年を使用することもできます(形式が YYMM になるように) )。実例を示します。
SELECT PERIOD_DIFF(9906, 9905);
結果:
+-------------------------+ | PERIOD_DIFF(9906, 9905) | +-------------------------+ | 1 | +-------------------------+
例4–現在の日付を使用する
これは、現在の日付から期間引数の1つを導出する例です。次に、その期間が固定期間と比較されます。
SELECT CURDATE( ) AS 'Current Date', EXTRACT(YEAR_MONTH FROM CURDATE( )) AS 'Current Period', 199901 AS 'Previous Period', PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM CURDATE( )), 199901) AS 'Difference';
結果:
+--------------+----------------+-----------------+------------+ | Current Date | Current Period | Previous Period | Difference | +--------------+----------------+-----------------+------------+ | 2018-06-30 | 201806 | 199901 | 233 | +--------------+----------------+-----------------+------------+
例5–データベースの例
これは、前の例をさらに一歩進めて、現在の期間をデータベース内の日付から派生した期間と比較する例です。
USE sakila; SELECT EXTRACT(YEAR_MONTH FROM CURDATE( )) AS 'Current Period', payment_date AS 'Payment Date', EXTRACT(YEAR_MONTH FROM payment_date) AS 'Payment Period', PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM payment_date), EXTRACT(YEAR_MONTH FROM CURDATE( ))) AS 'Difference' FROM payment WHERE payment_id = 1;
結果:
+----------------+---------------------+----------------+------------+ | Current Period | Payment Date | Payment Period | Difference | +----------------+---------------------+----------------+------------+ | 201806 | 2005-05-25 11:30:37 | 200505 | -157 | +----------------+---------------------+----------------+------------+