O SQLite
random()
A função retorna um número inteiro pseudo-aleatório entre -9223372036854775808 e +9223372036854775807. Um número pseudo-aleatório é um número que parece ser aleatório, mas não é verdadeiramente aleatório. Um número pseudo-aleatório não é verdadeiramente aleatório porque seu valor foi gerado por uma semente conhecida. No entanto, um número pseudo-aleatório parecerá aleatório se o usuário não tiver conhecimento da semente ou do algoritmo que o criou.
Portanto, números pseudo-aleatórios geralmente são considerados bons o suficiente para muitas aplicações.
Exemplo
Aqui está um exemplo de geração de um número pseudo-aleatório com o
random()
função. SELECT random();
Resultado:
-882536775989953141
Somente valores positivos
Você pode combinar
random()
com abs()
para gerar apenas valores positivos. SELECT abs(random());
Neste caso, se
random()
gera um valor negativo, abs()
retornará o valor absoluto. Para demonstrar como
abs()
funciona, eis o que acontece se eu passar o número aleatório (negativo) do primeiro exemplo para o abs()
função:SELECT abs(-882536775989953141);
Resultado:
882536775989953141
Então, se passarmos
random()
para abs()
, e random()
gera um valor negativo, abs()
retornará esse valor como um valor positivo. Valor entre 0 e 100
Aqui está um exemplo de geração de um número positivo entre 0 e 100.
SELECT abs(random() % 100);
Aqui está um exemplo de seleção de vários valores aleatórios.
SELECT
abs(random() % 100) AS R1,
abs(random() % 100) AS R2,
abs(random() % 100) AS R3;
Resultado:
R1 R2 R3 ---------- ---------- ---------- 17 79 90
Retornar linhas aleatórias
Você pode usar
random()
em um ORDER BY
cláusula de uma consulta de banco de dados para retornar linhas aleatórias. Aqui está um exemplo.
SELECT * FROM Artist
ORDER BY random() LIMIT 5;
Resultado:
ArtistId Name ---------- ---------------------------------------- 131 Smashing Pumpkins 127 Red Hot Chili Peppers 169 Black Eyed Peas 60 Santana Feat. Dave Matthews 240 Gustav Mahler
E aqui está o que eu recebo se eu executá-lo novamente:
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
Se você tiver uma tabela grande, talvez queira modificar sua consulta para algo assim:
SELECT * FROM Artist
WHERE ArtistId IN
(SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);
Resultado:
ArtistId Name ---------- ---------------------------------------- 45 Sandra De Sá 105 Men At Work 110 Nirvana 205 Chris Cornell 267 Göteborgs Symfoniker & Neeme Järvi