MariaDB obsahuje RAND()
funkce, která vrací náhodné číslo. Přesněji, vrací DOUBLE
přesnost s plovoucí desetinnou čárkou v
v rozsahu 0 <= v < 1.0
.
To je skvělé, ale co když chcete vygenerovat celé číslo ve větším rozsahu – a rozsahu, který určíte?
Naštěstí existuje jednoduchá technika, jak to udělat.
Technika
Klíč, který vrací náhodné celé číslo v určitém rozsahu, je v následující syntaxi:
FLOOR(min_value + RAND() * (max_value - min_value +1))
Toto používá FLOOR()
funkce, která vrátí největší celočíselnou hodnotu, která není větší než její argument. Viděno jako naše RAND()
Funkce je součástí argumentu, vše, co musíme udělat, je použít několik dalších výpočtů, abychom specifikovali naše požadované minimální a maximální náhodné hodnoty.
Vygenerujte náhodné celé číslo mezi 1 a 10
S použitím výše uvedené syntaxe je zde příklad generování náhodného celého čísla mezi 1 a 10:
SELECT FLOOR(1 + RAND() * (10 - 1 +1));
Výsledek:
+---------------------------------+| PODLAŽÍ(1 + RAND() * (10 - 1 +1)) |+-------------------------------- -+| 7 |+---------------------------------+
Abychom viděli náhodný efekt, nazvěme to ještě:
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;
Výsledek:
+----+----+----+----+----+----+----+----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 3 | 6 | 10 | 4 | 6 | 10 | 1 | 6 |+----+----+----+----+----+----+----+----+
Vygenerujte náhodné celé číslo mezi 1 a 100
Abychom vygenerovali náhodné číslo mezi 1 a 100, vše, co musíme udělat, je nahradit 10 100:
SELECT FLOOR(1 + RAND() * (100 - 1 +1));
Výsledek:
+----------------------------------+| PODLAŽÍ(1 + RAND() * (100 - 1 +1)) |+-------------------------------- --+| 87 |+----------------------------------+
Abychom viděli náhodný efekt, nazvěme to ještě:
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;
Výsledek:
+----+----+----+----+----+----+----+----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 61 | 45 | 41 | 68 | 19 | 92 | 99 | 18 |+----+----+----+----+----+----+----+----+
Vygenerujte náhodné celé číslo mezi 10 000 a 50 000
Udělejme ještě jedno, tentokrát vygenerujeme náhodné číslo mezi 10 000 a 50 000:
SELECT FLOOR(10000 + RAND() * (50000 - 10000 +1));
Výsledek:
+--------------------------------------------+| PODLAHA(10000 + RAND() * (50000 - 10000 +1)) |+-------------------------------- ------------+| 46884 |+--------------------------------------------+A několik dalších volání, abyste viděli náhodný efekt:
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;
Výsledek:
+-------+-------+-------+-------+-------+------ -+-------+-------+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+-------+-------+-------+-------+-------+-------- +-------+--------+| 13688 | 37790 | 17884 | 46052 | 46608 | 44880 | 34578 | 28249 |+-------+-------+-------+-------+-------+-------- +-------+-------+