Прочитать на английском

Поделиться через


Использование функции RAND

Функция RAND вычисляет случайную величину с плавающей запятой и может при необходимости вычисления использовать значения типа tinyint, int или smallint в качестве начального значения.

В следующем примере вычисляется пара случайных чисел. Первая функция RAND() использует для выбора начального значения SQL Server, а вторая функция RAND() использует значение 3 в качестве начального.

SELECT RAND(), RAND(3);

Функция RAND — это генератор псевдослучайных чисел, который работает аналогично функции rand из библиотеки С. Если начального значения нет, система создает свои собственные переменные начальные значения. При вызове функции RAND с начальным значением для формирования случайных чисел следует использовать переменные начальные значения. Если функцию вызвать RAND несколько раз с одним и тем же начальным значением, то она будет возвращать одно и то же число. В следующем сценарии при вызовах функции RAND возвращается одно и то же число, поскольку начальное значение остается постоянным:

SELECT RAND(159784);
SELECT RAND(159784);
SELECT RAND(159784);

Общий способ формирования случайных чисел с помощью функции RAND состоит в том, что в качестве начального значения используется что-либо относительно переменное (например отдельные части значения функции GETDATE):

SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
           + (DATEPART(ss, GETDATE()) * 1000 )
           + DATEPART(ms, GETDATE()) );

При формировании начальных значений с помощью функции GETDATE функция RAND будет по-прежнему выдавать одинаковые значения, если она вызывается несколько раз в течение наименьшего временного интервала, применяемого в алгоритме. Это особенно вероятно, если несколько вызовов функции RAND содержатся в одном пакете. Такие вызовы могут выполняться в течение одной миллисекунды. Это наименьшее приращение DATEPART. В подобных случаях для формирования начального значения следует использовать величину, основанную на чем-то, отличном от времени.