Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Qual a necessidade do '-1' na formula do número aleatório?

Não entendi muito bem a necessidade do '-1' na formula do RAND - SELECT ROUND(((500 - 100 - 1) * RAND() + 100),0);.

Entendo que: ( 500 (intervalo final) - 100 (intervalo inicial) = 400 (número de intervalos entre 100 e 500) ) * RAND() + 100 (intervalo inicial) em conjunto com o ROUND geraria um numero aleatório entre 100 e 500, mas adicionar o -1 não faria o numero 500 nunca ser gerado?

Inclusive fiz alguns testes utilizando loop para testar e cheguei à essa mesma conclusão -

DECLARE @NUM INT;
DECLARE @I INT;
DECLARE @TABELA TABLE (TENTATIVA INT, NUM_GERADO INT)
SET @NUM = 0;
SET @I = 1
WHILE @NUM != 500
BEGIN
    SELECT @NUM = ROUND(((500 - 100 - 1) * RAND() + 100),0);
    PRINT 'TENTATIVA: ' + CONVERT(VARCHAR(30),@I);
    INSERT INTO @TABELA VALUES (@I,@NUM);
    SET @I = @I + 1;
END
SELECT * FROM @TABELA

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Pode-se concluir que o numero 500 nunca vai ser gerado.

Porém sem utilizar o -1:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Nesse caso o 100 também seria englobado porque o RAND poderia gerar um número <= que 0,001 resultando em um número <= 100,4 e o ROUND arredondaria para baixo, também nunca passaria de 500 mesmo que o RAND gerasse o maior número possível.

1 resposta
solução!

Oii, Caio! Como vai?

Sua observação é muito pertinente! A função RAND() do SQL Server gera um valor aleatório entre 0 (inclusive) e 1 (exclusivo).

Nesse caso, da fórmula utilizada em aula, o número 500 será excluído da seleção.

Agradeço por compartilhar seus testes com o fórum!

Abraços.