SQL RAND:运行时生成随机数

SQL RAND function

摘要:在本教程中,你将了解如何使用 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

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 函数如何在运行时查询中生成伪随机数。

本教程是否有用?