postgresql 生成1 - 10范围内的随机数

sirbozc5  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(9)|浏览(236)

由于我在this question中使用的测试查询方法没有成功,我现在尝试其他方法。有没有办法告诉pg的random()函数只获取1到10之间的数字?

a2mppw5e

a2mppw5e1#

如果1到10之间的数字是指大于等于1且小于10的浮点数,那么很容易:

select random() * 9 + 1

这可以很容易地测试:

# select min(i), max(i) from (
    select random() * 9 + 1 as i from generate_series(1,1000000)
) q;
       min       |       max
-----------------+------------------
 1.0000083274208 | 9.99999571684748
(1 row)

如果你想要整数,即大于等于1且小于10,那么很简单:

select trunc(random() * 9 + 1)

再一次,简单的测试:

# select min(i), max(i) from (
    select trunc(random() * 9 + 1) as i from generate_series(1,1000000)
) q;
 min | max
-----+-----
   1 |   9
(1 row)
hjqgdpho

hjqgdpho2#

为了进行总结和简化,您可以用途:

-- 0 - 9
select floor(random() * 10);
-- 0 - 10
SELECT floor(random() * (10 + 1));
-- 1 - 10
SELECT ceil(random() * 10);

您可以像@user80168所提到的那样对此进行测试

-- 0 - 9
SELECT min(i), max(i) FROM (SELECT floor(random() * 10) AS i FROM generate_series(0, 100000)) q;
-- 0 - 10
SELECT min(i), max(i) FROM (SELECT floor(random() * (10 + 1)) AS i FROM generate_series(0, 100000)) q;
-- 1 - 10
SELECT min(i), max(i) FROM (SELECT ceil(random() * 10) AS i FROM generate_series(0, 100000)) q;
9bfwbjaz

9bfwbjaz3#

如果您正在使用SQL Server,则获取整数正确方法是

SELECT Cast(RAND()*(b-a)+a as int);

在哪里

  • 'B'为上限
  • 'a'为下限
mnowg1ta

mnowg1ta4#

(截断(随机()* 10)% 10)+ 1

rks48beu

rks48beu5#

hythlodayr答案的正确版本。

-- ERROR:  operator does not exist: double precision % integer
-- LINE 1: select (trunc(random() * 10) % 10) + 1

trunc的输出必须被转换成INTEGER,但是不需要trunc也能完成,所以很简单。

select (random() * 9)::INTEGER + 1

生成范围为[1,10]的INTEGER输出,即同时包含1和10。
对于任何数字(浮点数),请参阅user80168的答案。即不要将其转换为INTEGER

3b6akqbq

3b6akqbq6#

其实我不知道你想这个。
试试这个

INSERT INTO my_table (my_column)
SELECT
    (random() * 10) + 1
;
aiazj4mn

aiazj4mn7#

这个存储过程在表中插入一个随机数。注意,它插入了一个无穷的数字。当你得到足够的数字时,停止执行它。
为游标创建表:

CREATE TABLE [dbo].[SearchIndex](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Cursor] [nvarchar](255) NULL)

执行
创建一个包含数字的表格:

CREATE TABLE [dbo].[ID](
[IDN] [int] IDENTITY(1,1) NOT NULL,
[ID] [int] NULL)

插入脚本:

INSERT INTO [SearchIndex]([Cursor])  SELECT N'INSERT INTO ID  SELECT   FLOOR(rand() * 9 + 1)  SELECT COUNT (ID) FROM ID

创建和执行程序:

CREATE PROCEDURE [dbo].[RandNumbers] AS
BEGIN
Declare  CURSE  CURSOR  FOR (SELECT  [Cursor] FROM [dbo].[SearchIndex]  WHERE [Cursor] IS NOT NULL)
DECLARE @RandNoSscript NVARCHAR (250)
OPEN CURSE
FETCH NEXT FROM CURSE
INTO @RandNoSscript 
WHILE @@FETCH_STATUS IS NOT NULL 
BEGIN
Print @RandNoSscript
EXEC SP_EXECUTESQL @RandNoSscript;  
 END
 END
GO

填写表格:

EXEC RandNumbers
ovfsdjhp

ovfsdjhp8#

试试这个:

Select (ROW_NUMBER() OVER (ORDER BY ItemDesc ASC)+15000) as ID, ItemCode, ItemDesc
l7wslrjt

l7wslrjt9#

范例

SELECT RAND()*(min-max)+max

相关问题