Das SQLite random()
Funktion gibt eine Pseudozufallszahl zwischen -9223372036854775808 und +9223372036854775807 zurück.
Eine Pseudozufallszahl ist eine Zahl, die zufällig erscheint, aber nicht wirklich zufällig ist. Eine Pseudozufallszahl ist nicht wirklich zufällig, da ihr Wert von einem bekannten Seed generiert wurde. Eine Pseudozufallszahl erscheint jedoch zufällig, wenn der Benutzer keine Kenntnis von dem Seed oder Algorithmus hat, der sie erstellt hat.
Daher werden Pseudozufallszahlen für viele Anwendungen oft als gut genug angesehen.
Beispiel
Hier ist ein Beispiel für die Generierung einer Pseudozufallszahl mit random()
Funktion.
SELECT random();
Ergebnis:
-882536775989953141
Nur positive Werte
Sie können random()
kombinieren mit abs()
um nur positive Werte zu generieren.
SELECT abs(random());
In diesem Fall, wenn random()
erzeugt einen negativen Wert, abs()
gibt stattdessen den absoluten Wert zurück.
Um zu demonstrieren, wie abs()
funktioniert, Folgendes passiert, wenn ich die (negative) Zufallszahl aus dem ersten Beispiel an abs()
übergebe Funktion:
SELECT abs(-882536775989953141);
Ergebnis:
882536775989953141
Wenn wir also random()
übergeben zu abs()
, und random()
erzeugt einen negativen Wert, abs()
gibt diesen Wert als positiven Wert zurück.
Wert zwischen 0 und 100
Hier ist ein Beispiel für die Generierung einer positiven Zahl zwischen 0 und 100.
SELECT abs(random() % 100);
Hier ist ein Beispiel für die Auswahl mehrerer zufälliger Werte.
SELECT
abs(random() % 100) AS R1,
abs(random() % 100) AS R2,
abs(random() % 100) AS R3;
Ergebnis:
R1 R2 R3 ---------- ---------- ---------- 17 79 90
Zufällige Zeilen zurückgeben
Sie können random()
verwenden in einem ORDER BY
Klausel einer Datenbankabfrage, um zufällige Zeilen zurückzugeben.
Hier ist ein Beispiel.
SELECT * FROM Artist
ORDER BY random() LIMIT 5;
Ergebnis:
ArtistId Name ---------- ---------------------------------------- 131 Smashing Pumpkins 127 Red Hot Chili Peppers 169 Black Eyed Peas 60 Santana Feat. Dave Matthews 240 Gustav Mahler
Und hier ist, was ich bekomme, wenn ich es erneut ausführe:
ArtistId Name ---------- ---------------------------------------- 234 Orchestra of The Age of Enlightenment 126 Raul Seixas 76 Creedence Clearwater Revival 182 Nega Gizza 63 Santana Feat. Lauryn Hill & Cee-Lo
Wenn Sie eine große Tabelle haben, möchten Sie Ihre Abfrage vielleicht so ändern:
SELECT * FROM Artist
WHERE ArtistId IN
(SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);
Ergebnis:
ArtistId Name ---------- ---------------------------------------- 45 Sandra De Sá 105 Men At Work 110 Nirvana 205 Chris Cornell 267 Göteborgs Symfoniker & Neeme Järvi