sql >> Databasteknik >  >> RDS >> MariaDB

Hur man genererar ett slumpmässigt heltal inom ett intervall i MariaDB

MariaDB innehåller en RAND() funktion som returnerar ett slumptal. Mer exakt returnerar den en DOUBLE precisionsflyttalsvärde v i intervallet 0 <= v < 1.0 .

Det här är bra, men vad händer om du vill generera ett heltal inom ett större intervall – och ett intervall som du anger?

Lyckligtvis finns det en enkel teknik för att göra detta.

Tekniken

Nyckeln för att returnera ett slumpmässigt heltal inom ett specifikt intervall är i följande syntax:

FLOOR(min_value + RAND() * (max_value - min_value +1)) 

Detta använder FLOOR() funktion för att returnera det största heltalsvärdet som inte är större än dess argument. Som vår RAND() funktion är en del av argumentet, allt vi behöver göra är att tillämpa några fler beräkningar för att specificera våra erforderliga lägsta och högsta slumpmässiga värden.

Generera ett slumpmässigt heltal mellan 1 och 10

Så, med ovanstående syntax, här är ett exempel på att generera ett slumpmässigt heltal mellan 1 och 10:

SELECT FLOOR(1 + RAND() * (10 - 1 +1)); 

Resultat:

+--------------------------------+| FLOOR(1 + RAND() * (10 - 1 +1)) |+-------------------------------- -+| 7 |+----------------------------------------+

Låt oss kalla det lite mer för att se den slumpmässiga effekten:

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; 

Resultat:

+----+----+----+----+----+-----+----+----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 3 | 6 | 10 | 4 | 6 | 10 | 1 | 6 |+----+----+----+----+----+-----+-----+----+

Generera ett slumpmässigt heltal mellan 1 och 100

För att generera ett slumptal mellan 1 och 100 behöver vi bara ersätta 10 med 100:

SELECT FLOOR(1 + RAND() * (100 - 1 +1)); 

Resultat:

+------------------------------------------+| FLOOR(1 + RAND() * (100 - 1 +1)) |+-------------------------------- --+| 87 |+------------------------------------------+

Låt oss kalla det lite mer för att se den slumpmässiga effekten:

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; 

Resultat:

+----+----+----+----+----+-----+----+----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 61 | 45 | 41 | 68 | 19 | 92 | 99 | 18 |+----+----+----+----+----+-----+----+----+

Generera ett slumpmässigt heltal mellan 10000 och 50000

Låt oss göra en till, den här gången genererar ett slumptal mellan 10 000 och 50 000:

SELECT FLOOR(10000 + RAND() * (50000 - 10000 +1)); 

Resultat:

+----------------------------------------------------+| FLOOR(10000 + RAND() * (50000 - 10000 +1)) |+-------------------------------- ------------+| 46884 |+----------------------------------------------------+ 

Och några fler samtal för att se den slumpmässiga effekten:

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; 

Resultat:

+-------+-------+-------+--------+-------+------ -+-------+-------+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+-------+-------+-------+-------+-------+------ +-------+-------+| 13688 | 37790 | 17884 | 46052 | 46608 | 44880 | 34578 | 28249 |+-------+-------+-------+-------+-------+------ +-------+-------+

  1. Går PostgreSQL långsamt? Tips och knep för att komma till källan

  2. Hur synkroniserar man Mysql DB om Master och slav har olika databas i fall av Mysql-replikering?

  3. SQL Server BCP export skadad fil?

  4. Oracle Unicode Spooling