De SQLite random()
functie retourneert een pseudo-willekeurig geheel getal tussen -9223372036854775808 en +9223372036854775807.
Een pseudo-willekeurig getal is een getal dat willekeurig lijkt, maar niet echt willekeurig is. Een pseudo-willekeurig getal is niet echt willekeurig omdat de waarde is gegenereerd door een bekende seed. Een pseudo-willekeurig getal lijkt echter willekeurig te zijn als de gebruiker geen kennis heeft van de seed of het algoritme dat het heeft gemaakt.
Daarom worden pseudo-willekeurige getallen voor veel toepassingen vaak als goed genoeg beschouwd.
Voorbeeld
Hier is een voorbeeld van het genereren van een pseudo-willekeurig getal met de random()
functie.
SELECT random();
Resultaat:
-882536775989953141
Alleen positieve waarden
Je kunt random()
. combineren met abs()
om alleen positieve waarden te genereren.
SELECT abs(random());
In dit geval, als random()
genereert een negatieve waarde, abs()
zal in plaats daarvan de absolute waarde retourneren.
Om te demonstreren hoe abs()
werkt, is dit wat er gebeurt als ik het (negatieve) willekeurige getal van het eerste voorbeeld doorgeef aan de abs()
functie:
SELECT abs(-882536775989953141);
Resultaat:
882536775989953141
Dus als we random()
. doorgeven naar abs()
, en random()
genereert een negatieve waarde, abs()
zal die waarde teruggeven als een positieve waarde.
Waarde tussen 0 en 100
Hier is een voorbeeld van het genereren van een positief getal tussen 0 en 100.
SELECT abs(random() % 100);
Hier is een voorbeeld van het selecteren van meerdere willekeurige waarden.
SELECT
abs(random() % 100) AS R1,
abs(random() % 100) AS R2,
abs(random() % 100) AS R3;
Resultaat:
R1 R2 R3 ---------- ---------- ---------- 17 79 90
Retourneer willekeurige rijen
U kunt random()
. gebruiken in een ORDER BY
clausule van een databasequery om willekeurige rijen te retourneren.
Hier is een voorbeeld.
SELECT * FROM Artist
ORDER BY random() LIMIT 5;
Resultaat:
ArtistId Name ---------- ---------------------------------------- 131 Smashing Pumpkins 127 Red Hot Chili Peppers 169 Black Eyed Peas 60 Santana Feat. Dave Matthews 240 Gustav Mahler
En dit is wat ik krijg als ik het opnieuw doe:
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
Als je een grote tabel hebt, wil je misschien je zoekopdracht wijzigen in iets als dit:
SELECT * FROM Artist
WHERE ArtistId IN
(SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);
Resultaat:
ArtistId Name ---------- ---------------------------------------- 45 Sandra De Sá 105 Men At Work 110 Nirvana 205 Chris Cornell 267 Göteborgs Symfoniker & Neeme Järvi