PERIOD_ADD
Описание
Вычисляет результат увеличения периода <period> на <month> месяцев.
Параметр <period> — целое число, в котором последние две цифры обозначают месяц (01-12), а предшествующие цифры — год.
Функция возвращает вычисленный период в виде целого числа (год + месяц).
Если значение года меньше 100, оно преобразуется в четырёхзначный формат по определённым правилам. Например: PERIOD_ADD(2501, 0) вернёт 202501, а не 2501.
Эта функция ведёт себя так же, как функция PERIOD_ADD в MySQL.
Синтаксис
PERIOD_ADD(`<period>`, `<month>`)
Параметры
| Параметр | Описание |
|---|---|
<period> | Обозначает период, состоящий из года и месяца.
|
<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.