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

PERIOD_ADD

説明

<period><month>ヶ月を加算した結果を計算します。

<period>は整数で、下2桁が月(01-12)を表し、それより上の桁が年を表します。 この関数は計算された期間を整数形式(年 + 月)で返します。

年の部分が100未満の場合、特定のルールに従って4桁の年形式に処理されます。 例:PERIOD_ADD(2501, 0)は2501ではなく202501を返します。

この関数はMySQLのPERIOD_ADD functionと一貫した動作をします。

構文

PERIOD_ADD(`<period>`, `month`)

パラメータ

Parameterデスクリプション
<period>年と月で構成される期間を表します。
  • Format: 月は末尾2桁を占め、[1, 12]の範囲内である必要があります。先頭の桁は年を表し、年の桁数に制限はありません。4桁を超えることも可能です。
  • Year Inference: 年の値は末尾2桁を除くすべての桁から直接取得されます。年が2桁の数字の場合(範囲:[00, 99])、年が70未満の場合は20YYとして解釈され、70以上の場合は19YYとして解釈されます。
  • Value Range: [0, 2^63-1]の範囲内の整数パラメータを受け入れます。
<month><period>に追加する月数。[-2^63, 2^63-1]の範囲の整数値を受け入れます。

Return Value

YYYYMMフォーマットで計算された期間を表す整数を返します。パラメータの説明で述べたように、年の部分は4桁に制限されません。

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

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

Examples

SELECT `period`, `month`, PERIOD_ADD(`period`, `month`) AS ans FROM test_period_add;
+----------+--------+----------+
| period | month | ans |
+----------+--------+----------+
| 200803 | 2 | 200805 |
| 200809 | 5 | 200902 |
| 803 | 2 | 200805 |
| 6910 | 3 | 207001 |
| 7001 | 1 | 197002 |
| 12345611 | 123456 | 13374411 |
| NULL | 10 | NULL |
| 202510 | NULL | NULL |
+----------+--------+----------+
-- Month part exceeds the range [1, 12]
SELECT PERIOD_ADD(202513, 1);
-- ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[INVALID_ARGUMENT]Period function got invalid period: 202513

-- Period exceeds BIGINT range
SELECT PERIOD_ADD(-1, 1);
-- ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[INVALID_ARGUMENT]Period function got invalid period: -1
SELECT PERIOD_ADD(9223372036854775807, 1);
+------------------------------------+
| PERIOD_ADD(9223372036854775807, 1) |
+------------------------------------+
| -9223372036854775808 |
+------------------------------------+

説明: Dorisは内部計算にint64_tを使用するため、オーバーフローが発生する可能性があります。この動作はMySQLと一致しています。