MariaDB enthält ein RAND()
Funktion, die eine Zufallszahl zurückgibt. Genauer gesagt gibt es ein DOUBLE
zurück Präzisions-Gleitkommawert v
im Bereich 0 <= v < 1.0
.
Das ist großartig, aber was ist, wenn Sie eine Ganzzahl innerhalb eines größeren Bereichs generieren möchten – und eines Bereichs, den Sie angeben?
Glücklicherweise gibt es dafür eine einfache Technik.
Die Technik
Der Schlüssel, der eine zufällige Ganzzahl innerhalb eines bestimmten Bereichs zurückgibt, hat die folgende Syntax:
FLOOR(min_value + RAND() * (max_value - min_value +1))
Dies verwendet den FLOOR()
Funktion, um den größten ganzzahligen Wert zurückzugeben, der nicht größer als sein Argument ist. Als unser RAND()
sehen Funktion Teil des Arguments ist, müssen wir nur noch ein paar Berechnungen durchführen, um unsere erforderlichen minimalen und maximalen Zufallswerte anzugeben.
Erzeuge eine zufällige ganze Zahl zwischen 1 und 10
Unter Verwendung der obigen Syntax ist hier also ein Beispiel für die Generierung einer zufälligen Ganzzahl zwischen 1 und 10:
SELECT FLOOR(1 + RAND() * (10 - 1 +1));
Ergebnis:
+---------------------------------+| FLOOR(1 + RAND() * (10 - 1 +1)) |+------------------------------- -+| 7 |+---------------------------------------------+
Nennen wir es etwas länger, um den Zufallseffekt zu sehen:
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;
Ergebnis:
+----+----+----+----+----+----+----+----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 3 | 6 | 10 | 4 | 6 | 10 | 1 | 6 |+----+----+----+----+----+----+----+----+
Erzeuge eine zufällige Ganzzahl zwischen 1 und 100
Um eine Zufallszahl zwischen 1 und 100 zu generieren, müssen wir nur 10 durch 100 ersetzen:
SELECT FLOOR(1 + RAND() * (100 - 1 +1));
Ergebnis:
+----------------------------------------------+| FLOOR(1 + RAND() * (100 - 1 +1)) |+------------------------------- --+| 87 |+---------------------------------+
Nennen wir es etwas länger, um den Zufallseffekt zu sehen:
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;
Ergebnis:
+----+----+----+----+----+----+----+----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 61 | 45 | 41 | 68 | 19 | 92 | 99 | 18 |+----+----+----+----+----+----+----+----+
Erzeuge eine zufällige Ganzzahl zwischen 10000 und 50000
Machen wir noch eins, dieses Mal generieren wir eine Zufallszahl zwischen 10000 und 50000:
SELECT FLOOR(10000 + RAND() * (50000 - 10000 +1));
Ergebnis:
+--------------------------------------------------+| FLOOR(10000 + RAND() * (50000 - 10000 +1)) |+------------------------------- -------------+| 46884 |+---------------------------------------------------+Und noch ein paar Aufrufe, um den Zufallseffekt zu sehen:
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;
Ergebnis:
+-------+-------+-------+-------+-------+------ -+-------+-------+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+-------+-------+-------+-------+-------+------- +-------+-------+| 13688 | 37790 | 17884 | 46052 | 46608 | 44880 | 34578 | 28249 |+-------+-------+-------+-------+-------+------- +-------+-------+