Перейти к содержимому
Последнее обновление

PERIOD_ADD

Описание​

Вычисляет результат увеличения периода <period> на <month> месяцев.

Параметр <period> — целое число, в котором последние две цифры обозначают месяц (01-12), а предшествующие цифры — год. Функция возвращает вычисленный период в виде целого числа (год + месяц).

Если значение года меньше 100, оно преобразуется в четырёхзначный формат по определённым правилам. Например: PERIOD_ADD(2501, 0) вернёт 202501, а не 2501.

Эта функция ведёт себя так же, как функция PERIOD_ADD в MySQL.

Синтаксис​

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.