SQLite random()
функцията връща псевдослучайно цяло число между -9223372036854775808 и +9223372036854775807.
Псевдослучайно число е число, което изглежда случайно, но не е наистина случайно. Псевдослучайното число не е наистина случайно, защото стойността му е генерирана от известно начало. Псевдослучайно число обаче ще изглежда произволно, ако потребителят няма познания за семето или алгоритъма, който го е създал.
Следователно псевдослучайните числа често се считат за достатъчно добри за много приложения.
Пример
Ето пример за генериране на псевдослучайно число с random()
функция.
SELECT random();
Резултат:
-882536775989953141
Само положителни стойности
Можете да комбинирате random()
с abs()
за генериране само на положителни стойности.
SELECT abs(random());
В този случай, ако random()
генерира отрицателна стойност, abs()
вместо това ще върне абсолютната стойност.
За да демонстрирате как abs()
работи, ето какво се случва, ако предам (отрицателното) произволно число от първия пример на abs()
функция:
SELECT abs(-882536775989953141);
Резултат:
882536775989953141
Така че, ако предадем random()
към abs()
и random()
генерира отрицателна стойност, abs()
ще върне тази стойност като положителна стойност.
Стойност между 0 и 100
Ето пример за генериране на положително число между 0 и 100.
SELECT abs(random() % 100);
Ето пример за избор на множество произволни стойности.
SELECT
abs(random() % 100) AS R1,
abs(random() % 100) AS R2,
abs(random() % 100) AS R3;
Резултат:
R1 R2 R3 ---------- ---------- ---------- 17 79 90
Връщане на произволни редове
Можете да използвате random()
в ORDER BY
клауза на заявка към база данни за връщане на произволни редове.
Ето един пример.
SELECT * FROM Artist
ORDER BY random() LIMIT 5;
Резултат:
ArtistId Name ---------- ---------------------------------------- 131 Smashing Pumpkins 127 Red Hot Chili Peppers 169 Black Eyed Peas 60 Santana Feat. Dave Matthews 240 Gustav Mahler
И ето какво получавам, ако го стартирам отново:
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
Ако имате голяма таблица, може да искате да модифицирате заявката си до нещо подобно:
SELECT * FROM Artist
WHERE ArtistId IN
(SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);
Резултат:
ArtistId Name ---------- ---------------------------------------- 45 Sandra De Sá 105 Men At Work 110 Nirvana 205 Chris Cornell 267 Göteborgs Symfoniker & Neeme Järvi