Je voudrais savoir s'il existe un moyen de sélectionner un nombre généré au hasard entre 100 et 500 avec une requête de sélection.
Par exemple: 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 il ne peut pas fonctionner.
SELECT name, address, FLOOR(RAND() * 500) AS random_number FROM users
J'espère que quelqu'un m'aidera. Je vous remercie
Réponses:
Cela devrait donner ce que vous voulez:
De manière générique,
FLOOR(RAND() * (<max> - <min> + 1)) + <min>
génère un nombre entre<min
> et<max>
inclus.Mettre à jour
Cette déclaration complète devrait fonctionner:
la source
round()
cela donnera une distribution non uniforme.SET @r=FLOOR(RAND() * 401) + 100
, alorsSELECT @r
.RAND()
,UUID()
,NOW()
Sont des fonctions indéterministes. L'appel de ces fonctions doit être évité d'être écrit dans le journal bin pour la réplication. Par exemple.INSERT INTO t SET ID=UUID();
entraînera une valeur différente desID
champs sur le maître et les esclaves. Au contraire , il doit être écritSET @uuid:=UUID();
, puisINSERT INTO t SET ID=@uuid;
, puis les exécuter en une seule transaction. Ce sera sans danger pour la réplication. C'est un peu hors sujet pour cette question. Cela ne dit pas que votre réponse a un problème. :)Comme
RAND
produit un nombre 0 <= v <1.0 (voir la documentation ) que vous devez utiliserROUND
pour vous 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:
la source
En plus de cette réponse, créez une fonction comme
et appeler comme
SELECT myrandom(100,300);
Cela vous donne un nombre aléatoire entre 100 et 300
la source
Vous pouvez créer un nombre aléatoire en utilisant
FLOOR(RAND() * n) as randnum
(n est un entier), mais si vous n'avez pas besoin de répéter le même nombre aléatoire, vous devrez un peu stocker dans une table temporaire. Vous pouvez donc le comparer avecwhere randnum not in (select * from temptable)
...la source
ces deux fonctionnent bien:
la source
C'est la formule correcte pour trouver des entiers de
i
àj
oùi <= R <= j
la source
FLOOR(min+RAND()*(max-min+1))