MariaDB bevat een RAND()
functie die een willekeurig getal retourneert. Om precies te zijn, het retourneert een DOUBLE
precisie drijvende-kommawaarde v
in het bereik 0 <= v < 1.0
.
Dit is geweldig, maar wat als u een geheel getal wilt genereren binnen een groter bereik - en een bereik dat u opgeeft?
Gelukkig is er een eenvoudige techniek om dit te doen.
De techniek
De sleutel voor het retourneren van een willekeurig geheel getal binnen een specifiek bereik is in de volgende syntaxis:
FLOOR(min_value + RAND() * (max_value - min_value +1))
Dit gebruikt de FLOOR()
functie om de grootste gehele waarde te retourneren die niet groter is dan het argument. Gezien als onze RAND()
functie deel uitmaakt van het argument, hoeven we alleen nog een paar berekeningen toe te passen om onze vereiste minimale en maximale willekeurige waarden te specificeren.
Genereer een willekeurig geheel getal tussen 1 en 10
Dus, met behulp van de bovenstaande syntaxis, is hier een voorbeeld van het genereren van een willekeurig geheel getal tussen 1 en 10:
SELECT FLOOR(1 + RAND() * (10 - 1 +1));
Resultaat:
+---------------------------------+ | FLOOR(1 + RAND() * (10 - 1 +1)) | +---------------------------------+ | 7 | +---------------------------------+
Laten we het wat meer noemen om het willekeurige effect te zien:
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;
Resultaat:
+----+----+----+----+----+----+----+----+ | r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 | +----+----+----+----+----+----+----+----+ | 3 | 6 | 10 | 4 | 6 | 10 | 1 | 6 | +----+----+----+----+----+----+----+----+
Genereer een willekeurig geheel getal tussen 1 en 100
Om een willekeurig getal tussen 1 en 100 te genereren, hoeven we alleen 10 te vervangen door 100:
SELECT FLOOR(1 + RAND() * (100 - 1 +1));
Resultaat:
+----------------------------------+ | FLOOR(1 + RAND() * (100 - 1 +1)) | +----------------------------------+ | 87 | +----------------------------------+
Laten we het wat meer noemen om het willekeurige effect te zien:
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;
Resultaat:
+----+----+----+----+----+----+----+----+ | r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 | +----+----+----+----+----+----+----+----+ | 61 | 45 | 41 | 68 | 19 | 92 | 99 | 18 | +----+----+----+----+----+----+----+----+
Genereer een willekeurig geheel getal tussen 10000 en 50000
Laten we er nog een doen, deze keer een willekeurig getal tussen 10000 en 50000 genereren:
SELECT FLOOR(10000 + RAND() * (50000 - 10000 +1));
Resultaat:
+--------------------------------------------+ | FLOOR(10000 + RAND() * (50000 - 10000 +1)) | +--------------------------------------------+ | 46884 | +--------------------------------------------+
En nog wat telefoontjes om het willekeurige effect te zien:
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;
Resultaat:
+-------+-------+-------+-------+-------+-------+-------+-------+ | r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 | +-------+-------+-------+-------+-------+-------+-------+-------+ | 13688 | 37790 | 17884 | 46052 | 46608 | 44880 | 34578 | 28249 | +-------+-------+-------+-------+-------+-------+-------+-------+