
摘要:在本教程中,你将了解如何使用 SQL RAND
函数在运行时生成一个伪随机数。
SQL RAND 函数简介
RAND
函数生成介于 0 与 1(包括两者)之间的伪随机浮点数。下面说明了 RAND
函数的语法
RAND(seed);
Code language: SQL (Structured Query Language) (sql)
RAND
函数接受一个可选种子参数,其数据类型为整数。如果在一次会话中使用相同的种子值调用 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) 内(n <= R < m)的随机整数 R,你需要将 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
表

以下语句检索 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
函数如何在运行时查询中生成伪随机数。
本教程是否有用?