102 votes

création d'un nombre aléatoire à l'aide de MYSQL

J'aimerais savoir s'il existe un moyen de sélectionner un nombre généré aléatoirement entre 100 et 500 avec une requête de sélection.

Eg : SELECT name, address, random_number FROM users

Je n'ai pas besoin de stocker ce numéro dans la base de données et de l'utiliser uniquement à des fins d'affichage.

J'ai essayé quelque chose comme ça, mais ça n'arrive pas à fonctionner

SELECT name, address, FLOOR(RAND() * 500) AS random_number FROM users

J'espère que quelqu'un pourra m'aider. Je vous remercie.

156voto

Jack Points 88446

Cela devrait donner ce que vous voulez :

FLOOR(RAND() * 401) + 100

Généralement, FLOOR(RAND() * (<max> - <min> + 1)) + <min> génère un nombre entre <min > et <max> inclusive.

Update

Cette déclaration complète devrait fonctionner :

SELECT name, address, FLOOR(RAND() * 401) + 100 AS `random_number` 
FROM users

11voto

Ed Heal Points 24309

Comme RAND produit un nombre 0 <= v < 1.0 (voir documentation ), vous devez utiliser ROUND pour s'assurer que vous pouvez obtenir la limite supérieure (500 dans ce cas) et la limite inférieure (100 dans ce cas).

Donc pour produire la gamme dont vous avez besoin :

SELECT name, address, ROUND(100.0 + 400.0 * RAND()) AS random_number
FROM users

5voto

Kadir Erturk Points 427

En complément de cette réponse, créez une fonction comme

CREATE FUNCTION myrandom(
    pmin INTEGER,
    pmax INTEGER
)
RETURNS INTEGER(11)
DETERMINISTIC
NO SQL
SQL SECURITY DEFINER
BEGIN
  RETURN floor(pmin+RAND()*(pmax-pmin));
END; 

et appeler comme

SELECT myrandom(100,300);

Cela vous donne un nombre aléatoire entre 100 et 300

3voto

bonCodigo Points 8682

Vous pouvez créer un nombre aléatoire en utilisant FLOOR(RAND() * n) as randnum (n est un nombre entier), mais si vous n'avez pas besoin que le même nombre aléatoire soit répété, vous devrez le stocker dans une table temporaire. Vous pouvez donc le vérifier avec where randnum not in (select * from temptable) ...

3voto

KhalilPan Points 55

Ces deux-là fonctionnent bien :

select round(<maxNumber>*rand())

FLOOR(RAND() * (<max> - <min> + 1)) + <min> // generates a number
between <min> and <max> inclusive.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X