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


RAND (Transact-SQL)

Область применения:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureAzure Synapse AnalyticsБаза данных SQL в Microsoft Fabric

Возвращает псевдослучайное плавающее значение из 0 через 1, эксклюзивно.

Соглашения о синтаксисе Transact-SQL

Синтаксис

RAND ( [ seed ] )

Примечание.

Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.

Аргументы

seed

Целочисленное выражение (tinyint, smallint или int), дающее значение семени. Если начальное значение не указано, SQL Server ядро СУБД назначает начальное значение случайным образом. Для указанного начального значения возвращаемый результат всегда будет один и тот же.

Типы возвращаемых данных

float

Замечания

Повторяющиеся вызовы с тем же значением начального RAND() значения возвращают одинаковые результаты.

  • Для одного подключения, если RAND() вызывается указанное начальное значение, все последующие вызовы RAND() создают результаты на основе заполненного RAND() вызова. Например, следующий запрос всегда возвращает ту же последовательность чисел.

    SELECT RAND(100),
            RAND(),
            RAND();
    
  • При использовании RAND() функции в объекте UPDATE или INSERT запросе все затронутые строки получают одно и то же значение.

Примеры

А. Создайте четыре разных случайных числа

В следующем примере создаются четыре разных случайных числа, созданных функцией RAND() .

DECLARE @counter AS SMALLINT;

SET @counter = 1;

WHILE @counter < 5
    BEGIN
        SELECT RAND() AS RandomNumber;
        SET @counter = @counter + 1;
    END
GO

В. Случайным образом сгенерируйте 0 или 1

В следующем примере функция используется ROUND() для случайного возврата либо 0 , либо 1.

SELECT ROUND(RAND(), 0) AS ZeroOrOne;
GO

Примечание.

В этом примере FLOOR() функция всегда возвращает 0, тогда как функция CEILING() всегда возвращает 1.

С. Генерируйте случайные числа больше 1

Вы можете масштабировать диапазон случайного плавающего значения, умножив RAND() функцию на целое значение. Следующий пример возвращает случайное плавающее пространство между 0 и 10.

DECLARE @Constant AS INT;
SET @Constant = 10;

SELECT @Constant * RAND() AS RandomNumber;
GO

D. Генерируйте случайные целые числа

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

DECLARE @Constant AS INT;
SET @Constant = 10;

SELECT ROUND(@Constant * RAND(), 0) AS FirstRandomInteger,
       FLOOR(@Constant * RAND()) AS SecondRandomInteger,
       CEILING(@Constant * RAND()) AS ThirdRandomInteger;
GO

E. Вставьте случайные значения в таблицу

Следующий пример заполняет переменную таблицы случайными значениями int, float и bit .

DECLARE @RandomTable TABLE (
    RandomIntegers INT,
    RandomFloats FLOAT,
    RandomBits BIT);

DECLARE @RowCount AS INT;
DECLARE @Counter AS INT;

SET @RowCount = 10;
SET @Counter = 1;

WHILE @Counter <= @RowCount
    BEGIN
        INSERT INTO @RandomTable
        VALUES (ROUND(10 * RAND(), 0), RAND(), CAST (ROUND(RAND(), 0) AS BIT));
        SET @Counter = @Counter + 1;
    END

SELECT *
FROM @RandomTable;
GO