SQLite random()
funktion returnerar ett pseudoslumpmässigt heltal mellan -9223372036854775808 och +9223372036854775807.
Ett pseudoslumptal är ett tal som verkar vara slumpmässigt, men som inte är riktigt slumpmässigt. Ett pseudoslumptal är inte riktigt slumpmässigt eftersom dess värde genererades av ett känt frö. Ett pseudoslumptal kommer dock att verka vara slumpmässigt om användaren inte har någon kunskap om fröet eller algoritmen som skapade det.
Därför anses pseudoslumptal ofta vara tillräckligt bra för många tillämpningar.
Exempel
Här är ett exempel på att generera ett pseudoslumptal med random()
funktion.
SELECT random();
Resultat:
-882536775989953141
Endast positiva värden
Du kan kombinera random()
med abs()
för att bara generera positiva värden.
SELECT abs(random());
I det här fallet, om random()
genererar ett negativt värde, abs()
returnerar det absoluta värdet istället.
För att visa hur abs()
fungerar, här är vad som händer om jag skickar det (negativa) slumptalet från det första exemplet till abs()
funktion:
SELECT abs(-882536775989953141);
Resultat:
882536775989953141
Så om vi skickar random()
till abs()
, och random()
genererar ett negativt värde, abs()
returnerar det värdet som ett positivt värde.
Värde mellan 0 och 100
Här är ett exempel på att generera ett positivt tal mellan 0 och 100.
SELECT abs(random() % 100);
Här är ett exempel på att välja flera slumpmässiga värden.
SELECT
abs(random() % 100) AS R1,
abs(random() % 100) AS R2,
abs(random() % 100) AS R3;
Resultat:
R1 R2 R3 ---------- ---------- ---------- 17 79 90
Returnera slumpmässiga rader
Du kan använda random()
i en ORDER BY
sats i en databasfråga för att returnera slumpmässiga rader.
Här är ett exempel.
SELECT * FROM Artist
ORDER BY random() LIMIT 5;
Resultat:
ArtistId Name ---------- ---------------------------------------- 131 Smashing Pumpkins 127 Red Hot Chili Peppers 169 Black Eyed Peas 60 Santana Feat. Dave Matthews 240 Gustav Mahler
Och det här är vad jag får om jag kör det igen:
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
Om du har en stor tabell kanske du vill ändra din fråga till något sånt här:
SELECT * FROM Artist
WHERE ArtistId IN
(SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);
Resultat:
ArtistId Name ---------- ---------------------------------------- 45 Sandra De Sá 105 Men At Work 110 Nirvana 205 Chris Cornell 267 Göteborgs Symfoniker & Neeme Järvi