Генерация случайных чисел в диапазоне в SQL Server
Быстрый ответ
Чтобы получить случайное целое число в диапазоне от 3 до 6, можно использовать следующий SQL-запрос:
SELECT CEILING(3 + RAND() * (6 – 3));
В данном запросе сгенерированное функцией RAND() случайное число приводится к нужному диапазону и округляется функцией CEILING() до наименьшего большего целого числа в указанном диапазоне.

Альтернативные способы и особенности их использования
Рассмотрим другие методы, которые могут пригодиться в зависимости от ситуации и поставленных задач.
Совместное использование функций NEWID() и CHECKSUM
В SQL Server можно генерировать случайное число с помощью функций NEWID() и CHECKSUM():
SELECT ABS(CHECKSUM(NEWID()) % 4) + 3;
Функция NEWID() создаёт уникальный случайный идентификатор, CHECKSUM() преобразует его в число, а затем с помощью операции модуль получаем число от 0 до 3. Добавляя 3, мы получаем числа от 3 до 6.
Динамический диапазон для генерации случайных чисел
Этот подход позволяет генерировать числа в заданном диапазоне:
DECLARE @min int = 3;
DECLARE @max int = 6;
SELECT ABS(CHECKSUM(NEWID()) % (@max – @min + 1)) + @min;
Генерация гарантированно уникальных значений
Если необходимо сгенерировать уникальный ключ для каждой строки, RAND() может быть неэффективен:
SELECT ABS(CHECKSUM(NEWID()) % 4) + 3 FROM YourTable;
Визуализация
SQL-запрос, генерирующий случайное число, можно сравнить с броском игральной кости:
SELECT FLOOR(RAND() * 4) + 3;
Представьте себе бросание кубика с гранями, помеченными цифрами от 3 до 6:
🎲 Выпало:
3️⃣, 4️⃣, 5️⃣, 6️⃣
Эта операция эквивалентна выражению FLOOR(RAND() * 4) + 3.
Создание чисел с высокой степенью случайности
Функция CRYPT_GEN_RANDOM для высокой степени случайности
Если функции RAND() недостаточно, можно использовать функцию CRYPT_GEN_RANDOM:
SELECT CRYPT_GEN_RANDOM(1) % 4 + 3;
Функция CRYPT_GEN_RANDOM генерирует случайный байт, который затем ограничивается заданным диапазоном.
RAND() не подходит для задач с высокой энтропией
RAND() не рекомендуется использовать в условиях высокого уровня случайности, поэтому в критически важных случаях предпочтительнее выбрать CRYPT_GEN_RANDOM в SQL Server.
Эффективность использования различных типов данных – TINYINT
При работе с запросами к большим объемам данных стоит учитывать типы данных. Например, TINYINT может быть более экономичным выбором для хранения чисел от 0 до 255.
Полезные материалы
- Официальная документация Microsoft по функции
RAND()в SQL Server. - Руководство по использованию математических функций в PostgreSQL.
- Инструкция по функции
RAND()и другим математическим функциям в MySQL. - Рекомендации по использованию пакета DBMS_RANDOM в Oracle.
- Обсуждение генерации случайных чисел в SQL на Stack Overflow.
- Документация SQLite по встроенным функциям, включая генерацию случайных чисел.