メインコンテンツまでスキップ
バージョン: 26.x

PERIOD_DIFF

説明

2つのピリオド間の月数の差を計算します。

ここで<period>は整数で、末尾2桁が月(01-12)を表し、先頭の桁が年を表します。 この関数は period_1 - period_2 の絶対結果を返します。

年の部分が100未満の場合、特定のルールに従って4桁の年形式に変換されます。

この関数はMySQLのPERIOD_DIFF functionと一貫して動作します。

構文

PERIOD_DIFF(`<period_1>`, `<period_2>`)

パラメータ

パラメータ説明
<period_1>年と月で構成される期間を表します。
  • フォーマット: 月は最後の2桁を占め、[1, 12]の範囲内である必要があります。前の桁は年を表し、年の桁数は無制限です。4桁を超えることができます。
  • 年の推定: 年の値は最後の2桁を除くすべての桁から直接取得されます。年が2桁の数字の場合(範囲: [00, 99])、年が70未満の場合は20YYとして解釈され、70以上の場合は19YYとして解釈されます。
  • 値の範囲: [0, 2^63-1]の範囲内の整数パラメータを受け入れます。
<period_2>別の期間を表します。フォーマット要件は<period_1>と同じです。

戻り値

<period_1>の総月数から<period_2>の総月数を引いた値を表す整数を返します。

いずれかのパラメータがNULLの場合、または値をBIGINTに変換できない場合、関数はNULLを返します。

パラメータが負の値、または月の部分が無効な場合、関数はエラーをスローします。

SELECT `period_1`, `period_2`, PERIOD_DIFF(`period_1`, `period_2`) AS DIFF FROM `test_period_diff`;
+---------------------+----------+---------------------+
| period_1 | period_2 | DIFF |
+---------------------+----------+---------------------+
| 200802 | 200703 | 11 |
| 200703 | 200802 | -11 |
| 7001 | 6912 | -1199 |
| NULL | 2510 | NULL |
| 2510 | NULL | NULL |
| 9223372036854775807 | 101 | 1106804644422549090 |
| 9223372036854775808 | 101 | NULL |
+---------------------+----------+---------------------+

最後の行では、period_1がBIGINTの上限値(2^63-1)を超えているため、出力はNULLになります。

SELECT PERIOD_DIFF(1, -1);
-- ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[INVALID_ARGUMENT]Period function got invalid period: -1