Udostępnij za pomocą


RAND (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL database w usłudze Microsoft Fabric

Zwraca pseudo-losową wartość float od 0 do 1, wyłączną.

Transact-SQL konwencje składni

Składnia

RAND ( [ seed ] )

Uwaga / Notatka

Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.

Arguments

nasienie

Wyrażenie całkowite (tinyint, smallint lub int), które podaje wartość zalążkową. Jeśli seed nie jest określony, silnik bazy danych SQL Server losowo przypisuje wartość seeda. Dla określonej wartości seed wynik jest zawsze taki sam.

Typy zwracane

float

Uwagi

Powtarzalne wywołania z tą RAND() samą wartością seed dają te same wyniki.

  • Dla jednego połączenia, jeśli RAND() jest wywołane z określoną wartością zasiedzenia, wszystkie kolejne wywołania dają RAND() wyniki na podstawie zasiedzonego RAND() wywołania. Na przykład następujące zapytanie zawsze zwraca ten sam ciąg liczb.

    SELECT RAND(100),
            RAND(),
            RAND();
    
  • Gdy używasz RAND() funkcji w UPDATE zapytaniu or INSERT wszystkie dotknięte wiersze mają tę samą wartość.

Przykłady

A. Stwórz cztery różne liczby losowe

Poniższy przykład generuje cztery różne liczby losowe generowane przez tę funkcję RAND() .

DECLARE @counter AS SMALLINT;

SET @counter = 1;

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

B. Losowo generuj 0 lub 1

Poniższy przykład wykorzystuje ROUND() funkcję do losowego zwracania albo , 0 albo 1.

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

Uwaga / Notatka

W tym przykładzie FLOOR() funkcja zawsze zwraca 0, natomiast funkcja CEILING() zawsze zwraca 1.

C. Generuj liczby losowe większe niż 1

Możesz skalować zakres przypadkowego floatu , mnożąc RAND() funkcję wartością całkowitą. Poniższy przykład zwraca losowy float między 0 a .10

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

SELECT @Constant * RAND() AS RandomNumber;
GO

D. Generuj losowe liczby całkowite

Możesz wygenerować losową wartość całkowitą, skalując RAND() funkcję i łącząc ją z , FLOOR(), lub CEILING() funkcjamiROUND(). Poniższy przykład zwraca losową liczbę całkowitą między 0 a 10, włącznie.

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. Wstaw losowe wartości do tabeli

Poniższy przykład wypełnia zmienną tabelową losowymi wartościami int, float i 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