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

PERIOD_DIFF

Описание​

Вычисляет разницу в месяцах между двумя периодами.

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

Если значение года меньше 100, оно преобразуется в четырёхзначный формат по определённым правилам.

Поведение этой функции соответствует поведению функции PERIOD_DIFF в MySQL.

Синтаксис​

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

Параметры​

ПараметрОписание
<period_1>Обозначает период, состоящий из года и месяца.
  • Формат: Месяц занимает последние две цифры и должен находиться в диапазоне [1, 12]. Предшествующие цифры обозначают год. Количество цифр в годе не ограничено и может превышать четыре.
  • Определение года: Значение года берётся непосредственно из всех цифр, кроме последних двух. Если год задан двузначным числом (диапазон: [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