Compartilhar via


Usando RAND

A função RAND calcula um número em ponto de flutuação aleatório de 0 a 1, e pode, como opção, tomar um valor tinyint, int, ou smallint como ponto de partida do número aleatório para calcular.

O exemplo a seguir calcula dois números aleatórios. A primeira função RAND() permite que o SQL Server escolha o valor de semente, e a segunda função RAND() usa o valor de 3 para a posição inicial.

SELECT RAND(), RAND(3);

A função RAND é um gerador de número pseudo-aleatório que opera de forma similar à função de biblioteca de tempo de execução C rand. Se nenhuma semente for fornecida, o sistema gerará seus próprios números variáveis de semente. Se você chamar RAND com um valor de semente, use valores de semente variáveis para gerar números aleatórios. Ao chamar RAND várias vezes com o mesmo valor de semente, ela retornará o mesmo valor gerado. O script a seguir retorna o mesmo valor para as chamadas para RAND, pois todas elas usam o mesmo valor de semente:

SELECT RAND(159784);
SELECT RAND(159784);
SELECT RAND(159784);

Uma maneira comum para gerar números aleatórios de RAND é incluir algo relativamente variável como o valor de semente, como a adição de diversas partes de um GETDATE:

SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
           + (DATEPART(ss, GETDATE()) * 1000 )
           + DATEPART(ms, GETDATE()) );

Quando você usa um algoritmo baseado em GETDATE para gerar valores de semente, RAND ainda pode gerar valores duplicados, se as chamadas para RAND forem feitas dentro do intervalo do menor datepart usada no algoritmo. Isso é especialmente provável quando as chamadas para RAND forem incluídas em um único lote. Podem ser executadas diversas chamadas para RAND em um único lote dentro do mesmo milissegundo. Esse é o menor incremento de DATEPART. Nesse caso, incorpore um valor baseado em algo além do tempo para gerar os valores de semente.