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


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

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

В следующем примере вычисляется пара случайных чисел. С помощью первой функции RAND() SQL Server 2005 получает значение, инициирующее генератор случайных чисел, а вторая функция 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. В подобных случаях для формирования начального значения следует использовать величину, основанную на чем-то, отличном от времени.

См. также

Другие ресурсы

RAND (Transact-SQL)
Математические функции (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005