MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak wygenerować losową liczbę całkowitą w zakresie w MariaDB?

MariaDB zawiera RAND() funkcja zwracająca liczbę losową. Dokładniej, zwraca DOUBLE precyzyjna wartość zmiennoprzecinkowa v w zakresie 0 <= v < 1.0 .

To świetnie, ale co zrobić, jeśli chcesz wygenerować liczbę całkowitą z większego zakresu – i z zakresu, który określisz?

Na szczęście istnieje prosta technika, aby to zrobić.

Technika

Kluczem do zwracania losowej liczby całkowitej w określonym zakresie jest następująca składnia:

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

Używa FLOOR() funkcja zwracająca największą liczbę całkowitą nie większą niż jej argument. Widząc, jak nasza RAND() Funkcja jest częścią argumentu, wszystko, co musimy zrobić, to zastosować kilka dodatkowych obliczeń, aby określić nasze wymagane minimalne i maksymalne wartości losowe.

Wygeneruj losową liczbę całkowitą od 1 do 10

Tak więc, używając powyższej składni, oto przykład generowania losowej liczby całkowitej od 1 do 10:

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

Wynik:

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

Nazwijmy to trochę bardziej, aby zobaczyć efekt losowy:

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;

Wynik:

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

Wygeneruj losową liczbę całkowitą od 1 do 100

Aby wygenerować losową liczbę od 1 do 100, wystarczy, że zamienimy 10 na 100:

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

Wynik:

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

Nazwijmy to trochę bardziej, aby zobaczyć efekt losowy:

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;

Wynik:

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

Wygeneruj losową liczbę całkowitą między 10000 a 50000

Zróbmy jeszcze jedno, tym razem generując losową liczbę od 10000 do 50000:

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

Wynik:

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

I jeszcze kilka połączeń, aby zobaczyć efekt losowy:

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;

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Importowanie partycji InnoDB w MariaDB 10.0/10.1

  2. Migracja z Maxscale do Load Balancera ProxySQL

  3. MariaDB LENGTH() vs LENGTHB():Jaka jest różnica?

  4. MariaDB DZIEŃ () Wyjaśnione

  5. Co nowego w MariaDB 10.6