Ich würde gerne wissen, ob es eine Möglichkeit gibt, zufällig generierte Zahlen zwischen 100 und 500 zusammen mit einer Auswahlabfrage auszuwählen.
Z.B: SELECT name, address, random_number FROM users
Ich muss diese Nummer nicht in db speichern und nur zur Anzeige des Zwecks verwenden.
Ich habe es so etwas versucht, aber es kann nicht funktionieren.
SELECT name, address, FLOOR(RAND() * 500) AS random_number FROM users
Hoffe mir hilft mir jemand. Danke dir
Antworten:
Dies sollte geben, was Sie wollen:
FLOOR(RAND() * (<max> - <min> + 1)) + <min>
Generiert generell eine Zahl zwischen<min
> und<max>
einschließlich.Aktualisieren
Diese vollständige Erklärung sollte funktionieren:
quelle
round()
wird eine ungleichmäßige Verteilung geben.SET @r=FLOOR(RAND() * 401) + 100
dannSELECT @r
.RAND()
,UUID()
,NOW()
Sind indeterministischen Funktionen. Der Aufruf solcher Funktionen sollte vermieden werden, dass er zur Replikation in das Bin-Protokoll geschrieben wird. Beispielsweise.INSERT INTO t SET ID=UUID();
bewirkt, dass der Wert derID
Felder auf Master und Slaves unterschiedlich ist. Stattdessen muss es als geschriebenSET @uuid:=UUID();
und dannINSERT INTO t SET ID=@uuid;
in einer einzigen Transaktion ausgeführt werden. Dies ist replikationssicher. Dies ist ein wenig abseits des Themas für diese Frage. Es heißt nicht, dass Ihre Antwort ein Problem hat. :)Da
RAND
eine Zahl 0 <= v <1.0 (siehe Dokumentation ) erzeugt wird, müssen SieROUND
sicherstellen, dass Sie die Obergrenze (in diesem Fall 500) und die Untergrenze (in diesem Fall 100) erhalten.Um das Sortiment zu produzieren, das Sie benötigen:
quelle
Erstellen Sie zusätzlich zu dieser Antwort eine Funktion wie
und wie anrufen
SELECT myrandom(100,300);
Dies gibt Ihnen eine Zufallszahl zwischen 100 und 300
quelle
Sie können eine Zufallszahl mit
FLOOR(RAND() * n) as randnum
(n ist eine Ganzzahl) erstellen. Wenn Sie jedoch nicht dieselbe Zufallszahl wiederholen müssen, müssen Sie sie in einer temporären Tabelle speichern. Sie können es also mitwhere randnum not in (select * from temptable)
...quelle
beide funktionieren gut:
quelle
Dies ist richtige Formel ganze Zahlen zu finden , von
i
zuj
deneni <= R <= j
quelle
FLOOR(min+RAND()*(max-min+1))