Le SQLite random()
renvoie un entier pseudo-aléatoire compris entre -9223372036854775808 et +9223372036854775807.
Un nombre pseudo-aléatoire est un nombre qui semble être aléatoire, mais qui n'est pas vraiment aléatoire. Un nombre pseudo-aléatoire n'est pas vraiment aléatoire car sa valeur a été générée par une graine connue. Cependant, un nombre pseudo-aléatoire apparaîtra comme aléatoire si l'utilisateur n'a aucune connaissance de la graine ou de l'algorithme qui l'a créé.
Par conséquent, les nombres pseudo-aléatoires sont souvent considérés comme suffisants pour de nombreuses applications.
Exemple
Voici un exemple de génération d'un nombre pseudo-aléatoire avec le random()
fonction.
SELECT random();
Résultat :
-882536775989953141
Valeurs positives uniquement
Vous pouvez combiner random()
avec abs()
pour ne générer que des valeurs positives.
SELECT abs(random());
Dans ce cas, si random()
génère une valeur négative, abs()
renverra la valeur absolue à la place.
Pour démontrer comment abs()
fonctionne, voici ce qui se passe si je passe le nombre aléatoire (négatif) du premier exemple au abs()
fonction :
SELECT abs(-882536775989953141);
Résultat :
882536775989953141
Donc, si nous passons random()
à abs()
, et random()
génère une valeur négative, abs()
renverra cette valeur sous forme de valeur positive.
Valeur entre 0 et 100
Voici un exemple de génération d'un nombre positif entre 0 et 100.
SELECT abs(random() % 100);
Voici un exemple de sélection de plusieurs valeurs aléatoires.
SELECT
abs(random() % 100) AS R1,
abs(random() % 100) AS R2,
abs(random() % 100) AS R3;
Résultat :
R1 R2 R3 ---------- ---------- ---------- 17 79 90
Renvoyer des lignes aléatoires
Vous pouvez utiliser random()
dans un ORDER BY
clause d'une requête de base de données pour renvoyer des lignes aléatoires.
Voici un exemple.
SELECT * FROM Artist
ORDER BY random() LIMIT 5;
Résultat :
ArtistId Name ---------- ---------------------------------------- 131 Smashing Pumpkins 127 Red Hot Chili Peppers 169 Black Eyed Peas 60 Santana Feat. Dave Matthews 240 Gustav Mahler
Et voici ce que j'obtiens si je l'exécute à nouveau :
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
Si vous avez une grande table, vous voudrez peut-être modifier votre requête en quelque chose comme ceci :
SELECT * FROM Artist
WHERE ArtistId IN
(SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);
Résultat :
ArtistId Name ---------- ---------------------------------------- 45 Sandra De Sá 105 Men At Work 110 Nirvana 205 Chris Cornell 267 Göteborgs Symfoniker & Neeme Järvi