web-dev-qa-db-fra.com

créer un nombre aléatoire en utilisant MYSQL

Je voudrais 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. 

Exemple: SELECT name, address, random_number FROM users

Je n'ai pas à stocker ce nombre dans la base de données et seulement à l'utiliser pour afficher le but. 

J'ai essayé quelque chose comme ça, mais ça ne peut pas aller au travail ..

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

J'espère que quelqu'un m'aide ... Merci.

87
TNK

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 compris entre <min> et <max> inclus.

Mettre à jour

Cette déclaration complète devrait fonctionner:

SELECT name, address, FLOOR(Rand() * 401) + 100 AS `random_number` 
FROM users
135
Ja͢ck

Comme Rand produit un nombre 0 <= v <1.0 (voir documentation ), vous devez utiliser ROUND pour vous assurer d'obtenir la limite supérieure (500 dans ce cas) et 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
9
Ed Heal

Vous pouvez créer un nombre aléatoire à l'aide de FLOOR(Rand() * n) as randnum (n est un entier). Toutefois, si vous n'avez pas besoin de répéter le même nombre aléatoire, vous devrez les stocker dans une table temporaire. Vous pouvez donc vérifier avec where randnum not in (select * from temptable)...

3
bonCodigo

C'est la formule correcte pour trouver des entiers de i à ji <= R <= j

FLOOR(min+Rand()*(max-min))

ces deux fonctionnent bien:

select round(<maxNumber>*Rand())

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