SQL RAND:在執行階段產生隨機數

SQL RAND function

摘要:在本教學中,您將學習如何使用 SQL RAND 函數在執行階段產生偽隨機數。

SQL RAND 函數介紹

RAND 函數會產生介於 0 和 1 (含) 之間的偽隨機浮點數。以下說明 RAND 數字的語法:

RAND(seed);Code language: SQL (Structured Query Language) (sql)

RAND 函數接受一個可選的種子 (seed) 參數,其資料類型為整數。如果您在同一個會話中以相同的種子值呼叫 RAND 函數,該函數將會傳回完全相同的值。若要取得不同的隨機數,您必須指定不同的種子值,或使用不同的會話。

如果您省略種子參數,RAND 函數會在每次函數呼叫時傳回不同的浮點數隨機數。

請注意,某些資料庫系統,例如 PostgreSQL,提供一個名為 RANDOM 的函數,其功能與 RAND 函數相同。

SQL RAND 函數範例

以下範例示範如何產生介於 0 和 1 之間的隨機數。

SELECT RAND();Code language: SQL (Structured Query Language) (sql)

如果您多次執行此陳述式,將會看到不同的隨機數。

如果您多次執行以下陳述式,它將會產生完全相同的值,因為 RAND 函數使用了相同的種子值。

SELECT RAND(100);Code language: SQL (Structured Query Language) (sql)

產生指定範圍之間的隨機整數

若要產生範圍 (n, m) 內的隨機整數 R,其中 n <= R < m,您可以結合 RAND 函數和 ROUND 函數,如下所示:

ROUND(n + RAND() * (m − n))Code language: SQL (Structured Query Language) (sql)

例如,若要取得介於 1 和 100 之間的隨機數,您可以使用以下陳述式。

SELECT ROUND(1 + (RAND() * 99)) AS RAND_1_100;Code language: SQL (Structured Query Language) (sql)

以隨機順序查詢資料列

您可以在 ORDER BY 子句中使用 RAND 函數,以隨機順序擷取資料列,如下所示:

SELECT * FROM table_name
ORDER BY RAND();Code language: SQL (Structured Query Language) (sql)

若要從一組資料列中選取隨機樣本,請在上述陳述式中加入 LIMIT 子句。以下陳述式會擷取表格中的 N 個隨機資料列。

SELECT * FROM table_name
ORDER BY RAND()
LIMIT N;Code language: SQL (Structured Query Language) (sql)

讓我們看看 範例資料庫 中的 employees 表格

employees_table

以下陳述式會擷取 5 位隨機員工。

SELECT employee_id, first_name, last_name
FROM employees
ORDER BY RAND()
LIMIT 5;Code language: SQL (Structured Query Language) (sql)
 employee_id | first_name | last_name
-------------+------------+-----------
         113 | Luis       | Popp
         204 | Hermann    | Baer
         179 | Charles    | Johnson
         110 | John       | Chen
         111 | Ismael     | Sciarra
(5 rows)Code language: SQL (Structured Query Language) (sql)

請注意,您應該使用這種方式從資料量較小的表格中取得隨機資料列。對於大型表格,速度會很慢。

在本教學中,您學習了 SQL RAND 函數,以在執行階段的查詢中產生偽隨機數。

這個教學對您有幫助嗎?