Как сделать «рандомайзер» в SQL SERVER

Всем привет,
Только что, в ходе решения задачи, связанной с генерацией числового кода и рассылкой его всем ответственным за процесс людям, наткнулся на забавный момент, как таковой функции, которая возвращала бы случайное целое число в SQL SERVER — нет. Есть функция RAND(), но она работает весьма специфичным и не привычным после C# образом. А именно, описание из msdn

Важное замечание!!!

То есть без параметров функция RAND() возвращает в результирующий набор число примерно следующего вида: 0,370977989264927

А если в в качестве параметра передать например 1, то сколько бы раз и где бы ты не пытался выполнить RAND(1), ты всегда получишь:0,713591993212924
Это конечно можно как-то использовать, но не в моей текущей задаче.
Т.к. мне каждый день нужно устанавливать новый код доступа к конфигуратору лицензий — а это должно быть целое число, которое сгенерируется случайным образом каждый день.

Немного подумав я вспомнил про такие функции как ROUND() и FLOOR(), с помощью ROUND() можно получить дробное число с возможностью округления до десятых, сотых и т.д., а с помощью FLOOR() можно получить целое число, которое получается путем округления дробной части до целого в меньшую сторону. Есть еще функция CEILING(), которая делает тоже что и FLOOR, но округляет в большую сторону.

В итоге, получилось что-то вроде этого: select FLOOR(10000*RAND()) — в результирующем наборе случайное число от 1 до 9999

Как то так.

Пока дописывал, подумал, что еще в качестве хорошего варианта можно использовать:
declare @rand nvarchar(18)=RAND();
select SUBSTRING(@rand,3,4);
в этом случаи в результирующем наборе будет число от 0000 до 9999

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *