SQLite random()
La función devuelve un número entero pseudoaleatorio entre -9223372036854775808 y +9223372036854775807.
Un número pseudoaleatorio es un número que parece ser aleatorio, pero no es realmente aleatorio. Un número pseudoaleatorio no es verdaderamente aleatorio porque su valor fue generado por una semilla conocida. Sin embargo, un número pseudoaleatorio parecerá aleatorio si el usuario no conoce la semilla o el algoritmo que lo creó.
Por lo tanto, los números pseudoaleatorios a menudo se consideran lo suficientemente buenos para muchas aplicaciones.
Ejemplo
Aquí hay un ejemplo de cómo generar un número pseudoaleatorio con random()
función.
SELECT random();
Resultado:
-882536775989953141
Solo valores positivos
Puedes combinar random()
con abs()
para generar solo valores positivos.
SELECT abs(random());
En este caso, si random()
genera un valor negativo, abs()
devolverá el valor absoluto en su lugar.
Para demostrar cómo abs()
funciona, esto es lo que sucede si paso el número aleatorio (negativo) del primer ejemplo al abs()
función:
SELECT abs(-882536775989953141);
Resultado:
882536775989953141
Entonces, si pasamos random()
a abs()
y random()
genera un valor negativo, abs()
devolverá ese valor como un valor positivo.
Valor entre 0 y 100
Este es un ejemplo de cómo generar un número positivo entre 0 y 100.
SELECT abs(random() % 100);
Este es un ejemplo de cómo seleccionar varios valores aleatorios.
SELECT
abs(random() % 100) AS R1,
abs(random() % 100) AS R2,
abs(random() % 100) AS R3;
Resultado:
R1 R2 R3 ---------- ---------- ---------- 17 79 90
Devolver filas aleatorias
Puedes usar random()
en un ORDER BY
cláusula de una consulta de base de datos para devolver filas aleatorias.
He aquí un ejemplo.
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
Y esto es lo que obtengo si lo ejecuto de nuevo:
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 tiene una tabla grande, es posible que desee modificar su consulta a algo como esto:
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