MariaDB inkluderer en RAND()
funktion, der returnerer et tilfældigt tal. Mere præcist returnerer den en DOUBLE
præcision flydende komma værdi v
i området 0 <= v < 1.0
.
Det er fantastisk, men hvad nu hvis du vil generere et heltal inden for et større interval – og et interval, som du angiver?
Heldigvis er der en nem teknik til at gøre dette.
Teknikken
Nøglen til at returnere et tilfældigt heltal inden for et specifikt område er i følgende syntaks:
FLOOR(min_value + RAND() * (max_value - min_value +1))
Dette bruger FLOOR()
funktion for at returnere den største heltalværdi, der ikke er større end dens argument. Som vores RAND()
funktion er en del af argumentet, alt hvad vi skal gøre er at anvende et par flere beregninger for at specificere vores påkrævede minimum og maksimum tilfældige værdier.
Generer et tilfældigt heltal mellem 1 og 10
Så ved at bruge ovenstående syntaks er her et eksempel på generering af et tilfældigt heltal mellem 1 og 10:
SELECT FLOOR(1 + RAND() * (10 - 1 +1));
Resultat:
+--------------------------------+| GULV(1 + RAND() * (10 - 1 +1)) |+-------------------------------- -+| 7 |+----------------------------------------+
Lad os kalde det noget mere for at se den tilfældige effekt:
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;
Resultat:
+----+----+----+----+----+-----+----+----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 3 | 6 | 10 | 4 | 6 | 10 | 1 | 6 |+----+----+----+----+----+-----+----+----+
Generer et tilfældigt heltal mellem 1 og 100
For at generere et tilfældigt tal mellem 1 og 100, skal vi bare erstatte 10 med 100:
SELECT FLOOR(1 + RAND() * (100 - 1 +1));
Resultat:
+----------------------------------------+| GULV(1 + RAND() * (100 - 1 +1)) |+-------------------------------- --+| 87 |+------------------------------------------+
Lad os kalde det noget mere for at se den tilfældige effekt:
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;
Resultat:
+----+----+----+----+----+-----+----+----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 61 | 45 | 41 | 68 | 19 | 92 | 99 | 18 |+----+----+----+----+----+-----+-----+----+
Generer et tilfældigt heltal mellem 10000 og 50000
Lad os gøre en mere, denne gang genererer et tilfældigt tal mellem 10000 og 50000:
SELECT FLOOR(10000 + RAND() * (50000 - 10000 +1));
Resultat:
+----------------------------------------------------+| GULV(10.000 + RAND() * (50.000 - 10.000 +1)) |+-------------------------------- ------------+| 46884 |+----------------------------------------------------+Og nogle flere opkald for at se den tilfældige effekt:
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;
Resultat:
+-------+-------+-------+-------+-------+----- --+-------+-------+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+-------+-------+-------+-------+-------+------ +-------+-------+| 13688 | 37790 | 17884 | 46052 | 46608 | 44880 | 34578 | 28249 |+-------+-------+-------+-------+-------+------ +-------+-------+