Compartilhar via


RAND (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsBanco de Dados SQL no Microsoft Fabric

Retorna um valor float pseudo-aleatório de 0 através 1de , exclusivo.

Convenções de sintaxe de Transact-SQL

Sintaxe

RAND ( [ seed ] )

Observação

Não há suporte a essa sintaxe para o pool de SQL sem servidor no Azure Synapse Analytics.

Argumentos

seed

Uma expressão inteira (tinyint, smallint ou int) que fornece o valor semente. Se seed não estiver especificado, o Mecanismo de Banco de Dados do SQL Server atribuirá um valor de semente aleatório. Para um valor de semente especificado, o resultado retornado é sempre o mesmo.

Tipos de retorno

float

Comentários

Chamadas repetitivas de RAND() com o mesmo valor de semente retornam os mesmos resultados.

  • Para uma conexão, se RAND() for chamada com uma valor de semente especificado, todas as chamadas subsequentes de RAND() produzirão resultados com base na chamada de RAND() propagada. Por exemplo, a consulta a seguir sempre retorna a mesma sequência de números.

    SELECT RAND(100),
            RAND(),
            RAND();
    
  • Quando você usa a função RAND() em uma consulta UPDATE ou INSERT, todas as linhas afetadas obtêm o mesmo valor.

Exemplos

A. Crie quatro números aleatórios diferentes

O exemplo a seguir produz quatro números aleatórios diferentes gerados pela função RAND().

DECLARE @counter AS SMALLINT;

SET @counter = 1;

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

B. Gerar aleatoriamente 0 ou 1

O exemplo a seguir usa a ROUND() função para retornar aleatoriamente ou 10 .

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

Observação

Neste exemplo, a FLOOR() função sempre retorna 0, enquanto a CEILING() função sempre retorna 1.

C. Gerar números aleatórios maiores que 1

Você pode escalar o intervalo do flutuante aleatório multiplicando a RAND() função por um valor inteiro. O exemplo a seguir retorna um flutuante aleatório entre 0 e 10.

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

SELECT @Constant * RAND() AS RandomNumber;
GO

D. Gerar inteiros aleatórios

Você pode gerar um valor inteiro aleatório escalonando a RAND() função e combinando-a com as ROUND()funções, FLOOR(), ou CEILING() . O exemplo a seguir retorna um inteiro aleatório entre 0 e 10, inclusive.

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. Insira valores aleatórios em uma tabela

O exemplo a seguir preenche uma variável de tabela com valores aleatórios 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