sql >> Database >  >> RDS >> MariaDB

Een willekeurig geheel getal genereren binnen een bereik in MariaDB

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

  1. "Kan de trigger niet laten vallen" Fout bij het verwijderen van een aanmeldingstrigger? Probeer dit.

  2. Hoe CTE kan helpen bij het schrijven van complexe, krachtige zoekopdrachten:een prestatieperspectief

  3. 4 manieren om alle weergaven in MySQL weer te geven

  4. Rij bijwerken met gegevens uit een andere rij in dezelfde tabel