Vraag een willekeurig nummer maken met MYSQL


Ik zou graag willen weten of er een manier is om een ​​willekeurig gegenereerd getal tussen 100 en 500 samen met een geselecteerde query te selecteren.

bv: SELECT name, address, random_number FROM users

Ik hoef dit nummer niet op te slaan in db en het alleen te gebruiken om het doel weer te geven.

Ik probeerde het zoiets, maar het kan niet aan het werk gaan ..

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

Ik hoop dat iemand me helpt. Dank je


82
2018-02-10 14:16


oorsprong


antwoorden:


Dit zou moeten geven wat je wilt:

FLOOR(RAND() * 401) + 100

generiek, FLOOR(RAND() * (<max> - <min> + 1)) + <min> genereert een getal tussen <min> en <max> inclusive.

Bijwerken

Deze volledige verklaring zou moeten werken:

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

125
2018-02-10 14:20



Als RAND produceert een getal 0 <= v <1,0 (zie documentatie) die u moet gebruiken ROUND om ervoor te zorgen dat je de bovengrens kunt krijgen (500 in dit geval) en de ondergrens (100 in dit geval)

Dus om het bereik te produceren dat u nodig hebt:

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

8
2018-02-10 14:28



Aanvullend op dit antwoord, maakt u een functie zoals

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

en roep als

SELECT myrandom(100,300);

Dit geeft je een willekeurig getal tussen 100 en 300


4
2018-03-15 16:58



U kunt een willekeurig nummer maken met behulp van FLOOR(RAND() * n) as randnum (n is een geheel getal), maar als je niet hetzelfde willekeurige nummer nodig hebt om te worden herhaald, dan zul je wat moeten opslaan in een tijdelijke tabel. Dus je kunt het vergelijken met met where randnum not in (select * from temptable)...


3
2018-02-10 14:24



Dit is de juiste formule om hele getallen te vinden i naar j waar i <= R <= j

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

0
2018-03-27 11:29