MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

So generieren Sie eine zufällige Ganzzahl innerhalb eines Bereichs in MariaDB

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 |+-------+-------+-------+-------+-------+------- +-------+-------+