MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como gerar um número inteiro aleatório dentro de um intervalo no MariaDB


MariaDB inclui um RAND() função que retorna um número aleatório. Mais precisamente, ele retorna um DOUBLE valor de ponto flutuante de precisão v no intervalo 0 <= v < 1.0 .

Isso é ótimo, mas e se você quiser gerar um inteiro dentro de um intervalo maior – e um intervalo que você especificar?

Felizmente, existe uma técnica fácil para fazer isso.

A Técnica


A chave que retorna um inteiro aleatório dentro de um intervalo específico está na seguinte sintaxe:
FLOOR(min_value + RAND() * (max_value - min_value +1)) 

Isso usa o FLOOR() função para retornar o maior valor inteiro não maior que seu argumento. Vendo como nosso RAND() for parte do argumento, tudo o que precisamos fazer é aplicar mais alguns cálculos para especificar nossos valores aleatórios mínimos e máximos necessários.

Gerar um número inteiro aleatório entre 1 e 10


Então, usando a sintaxe acima, aqui está um exemplo de geração de um inteiro aleatório entre 1 e 10:
SELECT FLOOR(1 + RAND() * (10 - 1 +1)); 

Resultado:
+---------------------------------+| FLOOR(1 + RAND() * (10 - 1 +1)) |+-------------------------------- -+| 7 |+---------------------------------+

Vamos chamá-lo um pouco mais para ver o efeito aleatório:
SELECT 
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r1,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r2,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r3,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r4,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r5,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r6,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r7,
    FLOOR(1 + RAND() * (10 - 1 +1)) AS r8; 

Resultado:
+----+----+----+----+----+----+----+----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 3 | 6 | 10 | 4 | 6 | 10 | 1 | 6 |+----+----+----+----+----+----+----+----+

Gerar um número inteiro aleatório entre 1 e 100


Para gerar um número aleatório entre 1 e 100, basta substituir 10 por 100:
SELECT FLOOR(1 + RAND() * (100 - 1 +1)); 

Resultado:
+----------------------------------+| FLOOR(1 + RAND() * (100 - 1 +1)) |+-------------------------------- --+| 87 |+----------------------------------+

Vamos chamá-lo um pouco mais para ver o efeito aleatório:
SELECT 
    FLOOR(1 + RAND() * (100 - 1 +1)) AS r1,
    FLOOR(1 + RAND() * (100 - 1 +1)) AS r2,
    FLOOR(1 + RAND() * (100 - 1 +1)) AS r3,
    FLOOR(1 + RAND() * (100 - 1 +1)) AS r4,
    FLOOR(1 + RAND() * (100 - 1 +1)) AS r5,
    FLOOR(1 + RAND() * (100 - 1 +1)) AS r6,
    FLOOR(1 + RAND() * (100 - 1 +1)) AS r7,
    FLOOR(1 + RAND() * (100 - 1 +1)) AS r8; 

Resultado:
+----+----+----+----+----+----+----+----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 61 | 45 | 41 | 68 | 19 | 92 | 99 | 18 |+----+----+----+----+----+----+----+----+

Gerar um número inteiro aleatório entre 10.000 e 50.000


Vamos fazer mais uma, desta vez gerando um número aleatório entre 10.000 e 50.000:
SELECT FLOOR(10000 + RAND() * (50000 - 10000 +1)); 

Resultado:
+--------------------------------------------+| FLOOR(10000 + RAND() * (50000 - 10000 +1)) |+-------------------------------- ------------+| 46884 |+--------------------------------------------+ 
E mais algumas chamadas para ver o efeito aleatório:
SELECT 
    FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r1,
    FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r2,
    FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r3,
    FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r4,
    FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r5,
    FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r6,
    FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r7,
    FLOOR(10000 + RAND() * (50000 - 10000 +1)) AS r8; 

Resultado:
+-------+-------+-----------+-------+-------+------ -+-------+-------+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+-------+-------+-------+-------+-------+------- +-------+-------+| 13688 | 37790 | 17884 | 46052 | 46608 | 44880 | 34578 | 28249 |+-------+-----------+-------+-------+-------+------- +-------+-------+