MariaDB включва RAND()
функция, която връща произволно число. По-точно, той връща DOUBLE
прецизна стойност с плаваща запетая v
в диапазона 0 <= v < 1.0
.
Това е страхотно, но какво ще стане, ако искате да генерирате цяло число в по-голям диапазон – и диапазон, който сте посочили?
За щастие има лесна техника за това.
Техника
Ключът за връщане на произволно цяло число в конкретен диапазон е в следния синтаксис:
FLOOR(min_value + RAND() * (max_value - min_value +1))
Това използва FLOOR()
функция за връщане на най-голямата целочислена стойност, не по-голяма от нейния аргумент. Виждайки нашия RAND()
функцията е част от аргумента, всичко, което трябва да направим, е да приложим още няколко изчисления, за да посочим необходимите ни минимални и максимални произволни стойности.
Генерирайте произволно цяло число между 1 и 10
И така, използвайки горния синтаксис, ето пример за генериране на произволно цяло число между 1 и 10:
SELECT FLOOR(1 + RAND() * (10 - 1 +1));
Резултат:
+--------------------------------+| ЕТАЖ(1 + RAND() * (10 - 1 +1)) |+-------------------------------- -+| 7 |+---------------------------------+
Нека го наречем още малко, за да видим случайния ефект:
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;
Резултат:
+----+----+----+----+----+----+----+----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 3 | 6 | 10 | 4 | 6 | 10 | 1 | 6 |+----+----+----+----+----+----+----+----+
Генерирайте произволно цяло число между 1 и 100
За да генерираме произволно число между 1 и 100, всичко, което трябва да направим, е да заменим 10 със 100:
SELECT FLOOR(1 + RAND() * (100 - 1 +1));
Резултат:
+---------------------------------+| ЕТАЖ(1 + RAND() * (100 - 1 +1)) |+-------------------------------- --+| 87 |+---------------------------------+
Нека го наречем още малко, за да видим случайния ефект:
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;
Резултат:
+----+----+----+----+----+----+----+----+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+----+----+----+----+----+----+----+----+| 61 | 45 | 41 | 68 | 19 | 92 | 99 | 18 |+----+----+----+----+----+----+----+----+
Генерирайте произволно цяло число между 10000 и 50000
Нека направим още едно, този път генерирайки произволно число между 10000 и 50000:
SELECT FLOOR(10000 + RAND() * (50000 - 10000 +1));
Резултат:
+----------------------------------------------+| ЕТАЖ(10000 + RAND() * (50000 - 10000 +1)) |+-------------------------------- ------------+| 46884 |+-----------------------------------------------------+предварително>И още няколко обаждания, за да видите случайния ефект:
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;
Резултат:
+-------+-------+-------+-------+-------+------ -+-------+-------+| r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 |+-------+-------+-------+-------+-------+------- +-------+-------+| 13688 | 37790 | 17884 | 46052 | 46608 | 44880 | 34578 | 28249 |+-------+-------+-------+-------+-------+------- +-------+-------+