sql >> Databáze >  >> RDS >> MariaDB

Jak vygenerovat náhodné celé číslo v rozsahu v MariaDB

MariaDB obsahuje RAND() funkce, která vrací náhodné číslo. Přesněji, vrací DOUBLE přesnost s plovoucí desetinnou čárkou v v rozsahu 0 <= v < 1.0 .

To je skvělé, ale co když chcete vygenerovat celé číslo ve větším rozsahu – a rozsahu, který určíte?

Naštěstí existuje jednoduchá technika, jak to udělat.

Technika

Klíč, který vrací náhodné celé číslo v určitém rozsahu, je v následující syntaxi:

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

Toto používá FLOOR() funkce, která vrátí největší celočíselnou hodnotu, která není větší než její argument. Viděno jako naše RAND() Funkce je součástí argumentu, vše, co musíme udělat, je použít několik dalších výpočtů, abychom specifikovali naše požadované minimální a maximální náhodné hodnoty.

Vygenerujte náhodné celé číslo mezi 1 a 10

S použitím výše uvedené syntaxe je zde příklad generování náhodného celého čísla mezi 1 a 10:

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

Výsledek:

+---------------------------------+| PODLAŽÍ(1 + RAND() * (10 - 1 +1)) |+-------------------------------- -+| 7 |+---------------------------------+

Abychom viděli náhodný efekt, nazvěme to ještě:

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; 

Výsledek:

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

Vygenerujte náhodné celé číslo mezi 1 a 100

Abychom vygenerovali náhodné číslo mezi 1 a 100, vše, co musíme udělat, je nahradit 10 100:

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

Výsledek:

+----------------------------------+| PODLAŽÍ(1 + RAND() * (100 - 1 +1)) |+-------------------------------- --+| 87 |+----------------------------------+

Abychom viděli náhodný efekt, nazvěme to ještě:

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; 

Výsledek:

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

Vygenerujte náhodné celé číslo mezi 10 000 a 50 000

Udělejme ještě jedno, tentokrát vygenerujeme náhodné číslo mezi 10 000 a 50 000:

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

Výsledek:

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

A několik dalších volání, abyste viděli náhodný efekt:

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; 

Výsledek:

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

  1. Jak vytvořit primární klíč v SQL Server (příklady T-SQL)

  2. MySQL Select Date Equal to Today

  3. Jak může CTE pomoci při psaní složitých a účinných dotazů:Perspektiva výkonu

  4. EF a TransactionScope pro SQL Server i Oracle bez eskalace/překlenutí na DTC?