SQLite random()
la funzione restituisce un numero intero pseudocasuale compreso tra -9223372036854775808 e +9223372036854775807.
Un numero pseudo-casuale è un numero che sembra essere casuale, ma non è veramente casuale. Un numero pseudo-casuale non è veramente casuale perché il suo valore è stato generato da un seme noto. Tuttavia, un numero pseudo-casuale sembrerà casuale se l'utente non è a conoscenza del seme o dell'algoritmo che lo ha creato.
Pertanto, i numeri pseudocasuali sono spesso considerati abbastanza buoni per molte applicazioni.
Esempio
Ecco un esempio di generazione di un numero pseudo-casuale con random()
funzione.
SELECT random();
Risultato:
-882536775989953141
Solo valori positivi
Puoi combinare random()
con abs()
generare solo valori positivi.
SELECT abs(random());
In questo caso, se random()
genera un valore negativo, abs()
restituirà invece il valore assoluto.
Per dimostrare come abs()
funziona, ecco cosa succede se passo il numero casuale (negativo) dal primo esempio a abs()
funzione:
SELECT abs(-882536775989953141);
Risultato:
882536775989953141
Quindi se passiamo random()
a abs()
e random()
genera un valore negativo, abs()
restituirà quel valore come un valore positivo.
Valore compreso tra 0 e 100
Ecco un esempio di generazione di un numero positivo compreso tra 0 e 100.
SELECT abs(random() % 100);
Ecco un esempio di selezione di più valori casuali.
SELECT
abs(random() % 100) AS R1,
abs(random() % 100) AS R2,
abs(random() % 100) AS R3;
Risultato:
R1 R2 R3 ---------- ---------- ---------- 17 79 90
Restituisci righe casuali
Puoi usare random()
in un ORDER BY
clausola di una query del database per restituire righe casuali.
Ecco un esempio.
SELECT * FROM Artist
ORDER BY random() LIMIT 5;
Risultato:
ArtistId Name ---------- ---------------------------------------- 131 Smashing Pumpkins 127 Red Hot Chili Peppers 169 Black Eyed Peas 60 Santana Feat. Dave Matthews 240 Gustav Mahler
Ed ecco cosa ottengo se lo eseguo di nuovo:
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 hai una tabella di grandi dimensioni, potresti voler modificare la tua query in qualcosa del genere:
SELECT * FROM Artist
WHERE ArtistId IN
(SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);
Risultato:
ArtistId Name ---------- ---------------------------------------- 45 Sandra De Sá 105 Men At Work 110 Nirvana 205 Chris Cornell 267 Göteborgs Symfoniker & Neeme Järvi