Создание случайного числа с помощью MYSQL
Я хотел бы знать, есть ли способ выбрать случайно сгенерированное число между 100 и 500 вместе с запросом выбора.
Например: SELECT name, address, random_number FROM users
Мне не нужно хранить это число в БД и использовать его только для отображения цели.
Я попробовал что-то вроде этого, но он не может получить работу..
SELECT name, address, FLOOR(RAND() * 500) AS random_number FROM users
Надеюсь, кто-нибудь поможет мне. Спасибо
6 ответов
Это должно дать то, что вы хотите:
FLOOR(RAND() * 401) + 100
В общем, FLOOR(RAND() * (<max> - <min> + 1)) + <min>
генерирует число между <min
> и <max>
включительно.
Обновить
Это полное утверждение должно работать:
SELECT name, address, FLOOR(RAND() * 401) + 100 AS `random_number`
FROM users
Как RAND
выдает число 0 <= v < 1.0 (см. документацию), которое необходимо использовать ROUND
чтобы убедиться, что вы можете получить верхнюю границу (в нашем случае 500) и нижнюю границу (в нашем случае 100)
Итак, для производства ассортимента вам нужно:
SELECT name, address, ROUND(100.0 + 400.0 * RAND()) AS random_number
FROM users
Дополнительно к этому ответу создайте такую функцию, как
CREATE FUNCTION myrandom(
pmin INTEGER,
pmax INTEGER
)
RETURNS INTEGER(11)
DETERMINISTIC
NO SQL
SQL SECURITY DEFINER
BEGIN
RETURN floor(pmin+RAND()*(pmax-pmin));
END;
и звоните как
SELECT myrandom(100,300);
Это дает вам случайное число от 100 до 300
Они оба работают хорошо:
select round(<maxNumber>*rand())
FLOOR(RAND() * (<max> - <min> + 1)) + <min> // generates a number
between <min> and <max> inclusive.
Вы можете создать случайное число, используя FLOOR(RAND() * n) as randnum
(n - целое число), однако, если вам не нужно повторять одно и то же случайное число, вам придется несколько сохранить его во временной таблице. Таким образом, вы можете проверить это с where randnum not in (select * from temptable)
...
Это правильная формула, чтобы найти целые числа из i
в j
где i <= R <= j
FLOOR(min+RAND()*(max-min))