MOD в Oracle SQL — как использовать остаток от деления для парности

🟢MOD в Oracle SQL. Введение

Функция MOD в Oracle возвращает остаток от деления одного числа на другое. Это простая, но чрезвычайно полезная функция, особенно в задачах:

  • Распределения по парным/непарным категориям

  • Циклического счёта

  • Шахматных раскрасок

  • Группировок по N-элементам

  • Разметки чёт/нечёт в отчётах


🔤 Написание

sql
MOD(делимое, делитель)

🧮 Пример:

sql
MOD(7, 3) → 1

🔄 Где часто используется

  • Проверка на чётность: MOD(x, 2) = 0

  • Циклическое поведение (например, цвет строк в отчёте)

  • Разделение на группы по остатку

  • Оптимизация распределения данных (например, для шардирования)

  • Распределение задач между потоками


🧪 10 Примеров использования MOD с пояснениями

1️⃣ Проверка чётности числа

sql
SELECT employee_id,
CASE WHEN MOD(employee_id, 2) = 0 THEN 'Even' ELSE 'Odd' END AS parity
FROM employees;

Определяем, чётный или нечётный ID.


2️⃣ Окраска строк в отчёте (чёт/нечёт)

sql
SELECT rownum AS r,
MOD(rownum, 2) AS color_code
FROM dual CONNECT BY LEVEL <= 10;

Может использоваться в интерфейсах: чередовать цвет строк.


3️⃣ Группировка по 3 элемента

sql
SELECT *,
MOD(ROWNUM, 3) AS group_marker
FROM orders
WHERE ROWNUM <= 15;

Помечаем каждую третью строку.


4️⃣ Фильтрация каждой 5-й строки

sql
SELECT * FROM my_table
WHERE MOD(ROWNUM, 5) = 0;

Выбираем строки 5, 10, 15…


5️⃣ Чётность месяца

sql
SELECT hire_date,
CASE WHEN MOD(TO_NUMBER(TO_CHAR(hire_date, 'MM')), 2) = 0 THEN 'Even Month' ELSE 'Odd Month' END AS month_type
FROM employees;

Разметка по чётности месяца приёма.


6️⃣ Распределение задач по серверам (шардинг)

sql
SELECT job_id,
MOD(job_id, 4) AS shard_number
FROM jobs;

Определяем на какой из 4-х серверов пойдёт задача.


7️⃣ MOD с отрицательными числами

sql
SELECT MOD(-7, 3) FROM dual;
-- Результат: -1

В Oracle MOD сохраняет знак делимого.


8️⃣ Выбор каждой второй записи

sql
SELECT * FROM (
SELECT rownum AS rn, e.* FROM employees e
) WHERE MOD(rn, 2) = 0;

Получаем записи 2, 4, 6, …


9️⃣ Ротация скидок по дням недели

sql
SELECT day_name,
MOD(TO_NUMBER(TO_CHAR(SYSDATE, 'D')) + ROWNUM, 3) AS discount_group
FROM dual CONNECT BY LEVEL <= 7;

Циклическая разбивка на 3 группы скидок.


🔟 MOD в вычислениях с датами

sql
SELECT order_id,
MOD(TO_CHAR(order_date, 'DDD'), 7) AS weekday_group
FROM orders;

Группировка по дням недели на основе дня в году.


🧩 Заключение

Функция MOD в Oracle SQL — это ваш инструмент для контроля цикличности, чётности и распределения. Она проста, но позволяет элегантно решать задачи, которые иначе потребовали бы сложной логики.

💡 Запомни:

  • MOD(a, b) = остаток от деления a на b

  • Работает с отрицательными и положительными числами

  • Отлично сочетается с ROWNUM, TO_CHAR, CASE

  • Полезна для отчётности, разметки, деления по группам


🔜 Следующая статья:

SAVEPOINT в Oracle SQL — как создать точку возврата и откатываться выборочно внутри транзакции


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии