
摘要:在本教程中,你将了解如何使用 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 函数如何在运行时查询中生成伪随机数。
本教程是否有用?