본문으로 건너뛰기
최종 수정: 에

PERIOD_ADD

설명​

<period>에 <month>개월을 더한 결과를 계산합니다.

<period>는 정수이며, 마지막 두 자리는 월(01-12)을, 그 앞의 숫자는 연도를 나타냅니다. 이 함수는 계산된 기간을 정수(연도 + 월) 형식으로 반환합니다.

연도 부분이 100보다 작으면 특정 규칙에 따라 네 자리 연도 형식으로 처리됩니다. 예를 들어, PERIOD_ADD(2501, 0)의 반환값은 202501이며, 2501이 아닙니다.

이 함수는 MySQL의 PERIOD_ADD 함수와 동일하게 동작합니다.

구문​

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

매개변수​

매개변수설명
<period>연도와 월로 구성된 기간을 나타냅니다.
  • 형식: 마지막 두 자리는 월을 나타내며, 반드시 [1, 12] 범위에 있어야 합니다. 그 앞의 숫자는 연도를 나타내며, 연도의 자릿수에는 제한이 없어 네 자리를 초과할 수 있습니다.
  • 연도 추론: 마지막 두 자리를 제외한 모든 숫자를 연도 값으로 사용합니다. 연도가 두 자리 숫자(범위: [00, 99])인 경우, 70보다 작으면 20YY로 해석하고, 70 이상이면 19YY로 해석합니다.
  • 값 범위: [0, 2^63-1] 범위의 정수 매개변수를 허용합니다.
<month><period>에 더할 개월 수입니다. [-2^63, 2^63-1] 범위의 정수 값을 허용합니다.

반환값​

계산된 기간을 YYYYMM 형식의 정수로 반환합니다. 매개변수 설명에서 언급했듯이 연도 부분은 네 자리로 제한되지 않습니다.

매개변수 중 하나라도 NULL이거나 period 매개변수를 BIGINT로 변환할 수 없으면 함수는 NULL을 반환합니다.

period 매개변수가 음수이거나 월 부분이 유효하지 않으면 함수는 오류를 발생시킵니다.

예제​

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과 동일합니다.