MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come generare un numero intero casuale all'interno di un intervallo in MariaDB

MariaDB include un RAND() funzione che restituisce un numero casuale. Più precisamente, restituisce un DOUBLE valore in virgola mobile di precisione v nell'intervallo 0 <= v < 1.0 .

Questo è fantastico, ma cosa succede se vuoi generare un numero intero all'interno di un intervallo più ampio e un intervallo che specifichi?

Fortunatamente, esiste una tecnica semplice per farlo.

La Tecnica

La chiave che restituisce un numero intero casuale all'interno di un intervallo specifico è nella seguente sintassi:

FLOOR(min_value + RAND() * (max_value - min_value +1))

Questo utilizza il FLOOR() funzione per restituire il valore intero più grande non maggiore del suo argomento. Visto come il nostro RAND() funzione fa parte dell'argomento, tutto ciò che dobbiamo fare è applicare qualche altro calcolo per specificare i nostri valori casuali minimi e massimi richiesti.

Genera un numero intero casuale compreso tra 1 e 10

Quindi, usando la sintassi sopra, ecco un esempio di generazione di un numero intero casuale compreso tra 1 e 10:

SELECT FLOOR(1 + RAND() * (10 - 1 +1));

Risultato:

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

Chiamiamolo ancora un po' per vedere l'effetto casuale:

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;

Risultato:

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

Genera un numero intero casuale compreso tra 1 e 100

Per generare un numero casuale compreso tra 1 e 100, tutto ciò che dobbiamo fare è sostituire 10 con 100:

SELECT FLOOR(1 + RAND() * (100 - 1 +1));

Risultato:

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

Chiamiamolo ancora un po' per vedere l'effetto casuale:

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;

Risultato:

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

Genera un numero intero casuale compreso tra 10000 e 50000

Facciamone un altro, questa volta generando un numero casuale compreso tra 10000 e 50000:

SELECT FLOOR(10000 + RAND() * (50000 - 10000 +1));

Risultato:

+--------------------------------------------+
| FLOOR(10000 + RAND() * (50000 - 10000 +1)) |
+--------------------------------------------+
|                                      46884 |
+--------------------------------------------+

E altre chiamate per vedere l'effetto casuale:

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;

Risultato:

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