Spec-Zone.ru › MariaDB

RAND

Синтаксис

RAND(), RAND(N)

Описание

Возвращает случайное значение с плавающей точкой v с точностью DOUBLE в диапазоне 0 <= v < 1,0. Если указан целочисленный аргумент N, он используется в качестве значения начального состояния, что приводит к воспроизводимой последовательности значений столбцов. В примере ниже обратите внимание, что последовательности значений, полученные RAND(3), одинаковы в обоих местах, где они встречаются.

В операторе WHERE RAND() вычисляется каждый раз, когда выполняется WHERE.

Операторы, использующие функцию RAND(), не являются безопасными для репликации на основе операторов.

Практическое применение

Выражение для получения случайного целого числа из заданного диапазона:

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

RAND() часто используется для чтения случайных строк из таблицы следующим образом:

SELECT * FROM my_table ORDER BY RAND() LIMIT 10;

Однако этот метод не следует использовать для больших таблиц, так как он будет очень медленным. MariaDB прочитает все строки в таблице, сгенерирует случайное значение для каждой из них, отсортирует их и, наконец, применит оператор LIMIT.

Примеры

CREATE TABLE t (i INT);

INSERT INTO t VALUES(1),(2),(3);

SELECT i, RAND() FROM t;
+------+-------------------+
| i    | RAND()            |
+------+-------------------+
|    1 | 0.255651095188829 |
|    2 | 0.833920199269355 |
|    3 |  0.40264774151393 |
+------+-------------------+

SELECT i, RAND(3) FROM t;
+------+-------------------+
| i    | RAND(3)           |
+------+-------------------+
|    1 |  0.90576975597606 |
|    2 | 0.373079058130345 |
|    3 | 0.148086053457191 |
+------+-------------------+

SELECT i, RAND() FROM t;
+------+-------------------+
| i    | RAND()            |
+------+-------------------+
|    1 | 0.511478140495232 |
|    2 | 0.349447508668012 |
|    3 | 0.212803152588013 |
+------+-------------------+

Используя одно и то же начальное состояние, будет возвращена одна и та же последовательность:

SELECT i, RAND(3) FROM t;
+------+-------------------+
| i    | RAND(3)           |
+------+-------------------+
|    1 |  0.90576975597606 |
|    2 | 0.373079058130345 |
|    3 | 0.148086053457191 |
+------+-------------------+

Генерация случайного числа от 5 до 15:

SELECT FLOOR(5 + (RAND() * 11));

См. также

  • Методы эффективного поиска случайной строки
  • переменные сервера rand_seed1 и rand_seed2
Содержимое, воспроизведенное на этом сайте, является собственностью его соответствующих владельцев, и это содержимое не проходит предварительной проверки со стороны MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают взгляды MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/rand/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API