PostgreSQL 教程: 生成某个范围内的随机数

九月 6, 2023

摘要:本教程向您展示如何开发一个用户定义的函数来生成两个数字之间的随机数。

PostgreSQL 提供了返回 0 到 1 之间的随机数的random()函数。以下语句返回 0 到 1 之间的随机数。

SELECT random();
      random
-------------------
 0.867320362944156
(1 row)

要生成 1 到 11 之间的随机数,请使用以下语句:

SELECT random() * 10 + 1 AS RAND_1_11;
    rand_1_11
------------------
 7.75778411421925
(1 row)

如果要生成整数形式的随机数,请将floor()函数应用于表达式,如下所示:

SELECT floor(random() * 10 + 1)::int;
 floor
-------
     9
(1 row)

通常,要生成两个整数 l 和 h 之间的随机数,可以使用以下语句:

SELECT floor(random() * (h-l+1) + l)::int;

您可以开发一个用户定义的函数,返回两个数字 l 和 h 之间的随机数:

CREATE OR REPLACE FUNCTION random_between(low INT ,high INT) 
   RETURNS INT AS
$$
BEGIN
   RETURN floor(random()* (high-low + 1) + low);
END;
$$ language 'plpgsql' STRICT;

以下语句调用该random_between()函数并返回 1 到 100 之间的随机数:

SELECT random_between(1,100);
 random_between
----------------
             81
(1 row)

如果你想获得两个整数之间的多个随机数,可以使用以下语句:

SELECT random_between(1,100)
FROM generate_series(1,5);
 random_between
----------------
             37
             82
             19
             92
             43
(5 rows)

在本教程中,您学习了如何生成两个数字之间范围内的随机数。