Condividi tramite


RAND (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsDatabase SQL in Microsoft Fabric

Restituisce un valore float pseudo-casuale da 0 tramite 1, esclusivo.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

RAND ( [ seed ] )

Nota

Questa sintassi non è supportata da pool SQL serverless in Azure Synapse Analytics.

Argomenti

seed

Un'espressione intera (tinyint, smallint o int) che fornisce il valore seme. Se il valore di inizializzazione non è specificato, SQL Server motore di database assegna un valore di inizializzazione in modo casuale. Per un valore di inizializzazione specificato, il risultato restituito è sempre lo stesso.

Tipi restituiti

float

Osservazioni:

Le chiamate ripetitive di con lo stesso valore di RAND() inizializzazione restituiscono gli stessi risultati.

  • Per una connessione, se RAND() viene chiamato con un valore di inizializzazione specificato, tutte le chiamate successive di RAND() producono risultati in base alla chiamata con seeding RAND() . Ad esempio, la query seguente restituisce sempre la stessa sequenza di numeri.

    SELECT RAND(100),
            RAND(),
            RAND();
    
  • Quando si usa la RAND() funzione in una UPDATE query o INSERT , tutte le righe interessate ottengono lo stesso valore.

Esempi

A. Crea quattro numeri casuali diversi

Nell'esempio seguente vengono generati quattro numeri casuali diversi generati dalla RAND() funzione .

DECLARE @counter AS SMALLINT;

SET @counter = 1;

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

B. Generare casualmente 0 o 1

L'esempio seguente utilizza la ROUND() funzione per restituire casualmente o 0 o 1.

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

Nota

In questo esempio, la FLOOR() funzione restituisce 0sempre , mentre la CEILING() funzione restituisce 1sempre .

C. Genera numeri casuali maggiori di 1

Puoi scalare l'intervallo del float casuale moltiplicando la RAND() funzione con un valore intero. Il seguente esempio restituisce un galleggiante casuale tra 0 e 10.

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

SELECT @Constant * RAND() AS RandomNumber;
GO

D. Generare interi casuali

Puoi generare un valore intero casuale scalando la RAND() funzione e combinandola con le ROUND()funzioni, FLOOR(), oppure CEILING() . Il seguente esempio restituisce un intero casuale tra 0 e 10, inclusi.

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. Inserire valori casuali in una tabella

Il seguente esempio popola una variabile della tabella con valori casuali di int, float e 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