SQLite random()
funkce vrací pseudonáhodné celé číslo mezi -9223372036854775808 a +9223372036854775807.
Pseudonáhodné číslo je číslo, které se zdá být náhodné, ale ve skutečnosti náhodné není. Pseudonáhodné číslo není skutečně náhodné, protože jeho hodnota byla vygenerována známým zdrojem. Pseudonáhodné číslo se však bude jevit jako náhodné, pokud uživatel nezná seed nebo algoritmus, který jej vytvořil.
Proto jsou pseudonáhodná čísla často považována za dostatečně dobrá pro mnoho aplikací.
Příklad
Zde je příklad generování pseudonáhodného čísla pomocí random()
funkce.
SELECT random();
Výsledek:
-882536775989953141
Pouze kladné hodnoty
random()
můžete kombinovat pomocí abs()
generovat pouze kladné hodnoty.
SELECT abs(random());
V tomto případě, pokud random()
vygeneruje zápornou hodnotu abs()
místo toho vrátí absolutní hodnotu.
Ukázat, jak abs()
funguje, toto se stane, když předám (záporné) náhodné číslo z prvního příkladu do abs()
funkce:
SELECT abs(-882536775989953141);
Výsledek:
882536775989953141
Pokud tedy předáme random()
na abs()
a random()
vygeneruje zápornou hodnotu abs()
vrátí tuto hodnotu jako kladnou hodnotu.
Hodnota mezi 0 a 100
Zde je příklad generování kladného čísla mezi 0 a 100.
SELECT abs(random() % 100);
Zde je příklad výběru více náhodných hodnot.
SELECT
abs(random() % 100) AS R1,
abs(random() % 100) AS R2,
abs(random() % 100) AS R3;
Výsledek:
R1 R2 R3 ---------- ---------- ---------- 17 79 90
Vrátit náhodné řádky
Můžete použít random()
v ORDER BY
klauzule databázového dotazu pro vrácení náhodných řádků.
Zde je příklad.
SELECT * FROM Artist
ORDER BY random() LIMIT 5;
Výsledek:
ArtistId Name ---------- ---------------------------------------- 131 Smashing Pumpkins 127 Red Hot Chili Peppers 169 Black Eyed Peas 60 Santana Feat. Dave Matthews 240 Gustav Mahler
A tady je to, co dostanu, když to znovu spustím:
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
Pokud máte velkou tabulku, možná budete chtít upravit svůj dotaz na něco takového:
SELECT * FROM Artist
WHERE ArtistId IN
(SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);
Výsledek:
ArtistId Name ---------- ---------------------------------------- 45 Sandra De Sá 105 Men At Work 110 Nirvana 205 Chris Cornell 267 Göteborgs Symfoniker & Neeme Järvi