SQLite random()
funkcja zwraca pseudolosową liczbę całkowitą z zakresu od -9223372036854775808 do +9223372036854775807.
Liczba pseudolosowa to liczba, która wydaje się być losowa, ale tak naprawdę nie jest losowa. Liczba pseudolosowa nie jest tak naprawdę losowa, ponieważ jej wartość została wygenerowana przez znane ziarno. Jednak pseudolosowa liczba będzie wyglądać na losową, jeśli użytkownik nie ma wiedzy na temat źródła lub algorytmu, który ją utworzył.
Dlatego liczby pseudolosowe są często uważane za wystarczająco dobre dla wielu zastosowań.
Przykład
Oto przykład generowania liczby pseudolosowej za pomocą random()
funkcja.
SELECT random();
Wynik:
-882536775989953141
Tylko pozytywne wartości
Możesz połączyć random()
z abs()
generować tylko wartości dodatnie.
SELECT abs(random());
W tym przypadku, jeśli random()
generuje wartość ujemną, abs()
zamiast tego zwróci wartość bezwzględną.
Aby zademonstrować, jak abs()
działa, oto co się stanie, jeśli przekażę (ujemną) liczbę losową z pierwszego przykładu do abs()
funkcja:
SELECT abs(-882536775989953141);
Wynik:
882536775989953141
Więc jeśli przekażemy random()
do abs()
i random()
generuje wartość ujemną, abs()
zwróci tę wartość jako wartość dodatnią.
Wartość od 0 do 100
Oto przykład generowania liczby dodatniej od 0 do 100.
SELECT abs(random() % 100);
Oto przykład wyboru wielu losowych wartości.
SELECT
abs(random() % 100) AS R1,
abs(random() % 100) AS R2,
abs(random() % 100) AS R3;
Wynik:
R1 R2 R3 ---------- ---------- ---------- 17 79 90
Zwróć losowe wiersze
Możesz użyć random()
w ORDER BY
klauzula zapytania bazy danych, aby zwrócić losowe wiersze.
Oto przykład.
SELECT * FROM Artist
ORDER BY random() LIMIT 5;
Wynik:
ArtistId Name ---------- ---------------------------------------- 131 Smashing Pumpkins 127 Red Hot Chili Peppers 169 Black Eyed Peas 60 Santana Feat. Dave Matthews 240 Gustav Mahler
A oto, co otrzymam, jeśli uruchomię go ponownie:
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
Jeśli masz dużą tabelę, możesz zmodyfikować zapytanie w taki sposób:
SELECT * FROM Artist
WHERE ArtistId IN
(SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);
Wynik:
ArtistId Name ---------- ---------------------------------------- 45 Sandra De Sá 105 Men At Work 110 Nirvana 205 Chris Cornell 267 Göteborgs Symfoniker & Neeme Järvi