Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Gerar valor int aleatório de 3 a 6


Um editor útil adicionou o 'Select' antes de cada instrução, mas o ponto deste item é que ele pode gerar chaves exclusivas para cada linha em um retorno, não apenas um item (para isso eu usaria a função Rand()). Por exemplo :Selecione os 100 principais Rand(),* de tblExample

Retornaria o mesmo valor aleatório para todas as 100 linhas.

Enquanto:Selecione os 100 melhores ABS(CHECKSUM(NEWID()) % 10),* de tblexample

Retornaria um valor aleatório diferente entre 0 e 9 em cada linha no retorno. Assim, embora o select facilite copiar e colar, você pode copiar a lógica em uma instrução select se for necessário.

Isso gera um número aleatório entre 0-9
SELECT ABS(CHECKSUM(NEWID()) % 10)

1 a 6
SELECT ABS(CHECKSUM(NEWID()) % 6) + 1

3 a 6
SELECT ABS(CHECKSUM(NEWID()) % 4) + 3

Dinâmico (com base no comentário de Eilert Hjelmeseths, atualizado para corrigir bug (+ para -))
SELECT ABS(CHECKSUM(NEWID()) % (@max - @min - 1)) + @min

Atualizado com base nos comentários:
  • NEWID gera string aleatória (para cada linha em retorno)
  • CHECKSUM pega o valor da string e cria o número
  • módulo (% ) divide por esse número e retorna o restante (significando que o valor máximo é um a menos que o número que você usa)
  • ABS altera resultados negativos para positivos
  • adicione um ao resultado para eliminar 0 resultados (para simular um lançamento de dados)