SQLite random()
hàm trả về một số nguyên giả ngẫu nhiên giữa -9223372036854775808 và +9223372036854775807.
Một số giả ngẫu nhiên là một số có vẻ là ngẫu nhiên, nhưng không thực sự là ngẫu nhiên. Một số giả ngẫu nhiên không phải là ngẫu nhiên thực sự vì giá trị của nó được tạo ra bởi một hạt giống đã biết. Tuy nhiên, một số giả ngẫu nhiên sẽ có vẻ là ngẫu nhiên nếu người dùng không có kiến thức về hạt giống hoặc thuật toán đã tạo ra nó.
Do đó, các số giả ngẫu nhiên thường được coi là đủ tốt cho nhiều ứng dụng.
Ví dụ
Dưới đây là một ví dụ về việc tạo một số giả ngẫu nhiên với random()
chức năng.
SELECT random();
Kết quả:
-882536775989953141
Chỉ giá trị tích cực
Bạn có thể kết hợp random()
với abs()
để chỉ tạo ra các giá trị dương.
SELECT abs(random());
Trong trường hợp này, nếu random()
tạo giá trị âm, abs()
thay vào đó sẽ trả về giá trị tuyệt đối.
Để chứng minh cách abs()
hoạt động, đây là điều sẽ xảy ra nếu tôi chuyển số ngẫu nhiên (âm) từ ví dụ đầu tiên sang abs()
chức năng:
SELECT abs(-882536775989953141);
Kết quả:
882536775989953141
Vì vậy, nếu chúng ta chuyển random()
thành abs()
và random()
tạo giá trị âm, abs()
sẽ trả về giá trị đó dưới dạng giá trị dương.
Giá trị Từ 0 đến 100
Dưới đây là một ví dụ về việc tạo một số dương từ 0 đến 100.
SELECT abs(random() % 100);
Dưới đây là một ví dụ về việc chọn nhiều giá trị ngẫu nhiên.
SELECT
abs(random() % 100) AS R1,
abs(random() % 100) AS R2,
abs(random() % 100) AS R3;
Kết quả:
R1 R2 R3 ---------- ---------- ---------- 17 79 90
Trả về hàng ngẫu nhiên
Bạn có thể sử dụng random()
trong một ORDER BY
mệnh đề của một truy vấn cơ sở dữ liệu để trả về các hàng ngẫu nhiên.
Đây là một ví dụ.
SELECT * FROM Artist
ORDER BY random() LIMIT 5;
Kết quả:
ArtistId Name ---------- ---------------------------------------- 131 Smashing Pumpkins 127 Red Hot Chili Peppers 169 Black Eyed Peas 60 Santana Feat. Dave Matthews 240 Gustav Mahler
Và đây là những gì tôi nhận được nếu chạy lại:
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
Nếu bạn có một bảng lớn, bạn có thể muốn sửa đổi truy vấn của mình thành một cái gì đó như sau:
SELECT * FROM Artist
WHERE ArtistId IN
(SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);
Kết quả:
ArtistId Name ---------- ---------------------------------------- 45 Sandra De Sá 105 Men At Work 110 Nirvana 205 Chris Cornell 267 Göteborgs Symfoniker & Neeme Järvi