由于我在这个问题中处理测试查询的方法不起作用,现在我正在尝试其他方法。是否有一种方法可以告诉pg的random()
函数只获取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)
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)
总的来说,简化一点,您可以使用:
-- 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;
ceil(random() * 10)
可能会得到0,建议使用floor
。 - user6854914SELECT floor(random() * 10 + 1);
。 - SergiyKolesnikov如果您正在使用 SQL Server,则获取整数的正确方法是
SELECT Cast(RAND()*(b-a)+a as int);
当:
(trunc(random() * 10) % 10) + 1
min
和max
:min
但不包括max
。SELECT floor(random() * (max - min)) + min;
包括 min
和 max
,
SELECT floor(random() * (max - min + 1)) + min;
要获取1到10之间(包括10)的数字,
最小值=1,最大值=10
SELECT floor(random() * (10 - 1 + 1)) + 1;
-- ERROR: operator does not exist: double precision % integer
-- LINE 1: select (trunc(random() * 10) % 10) + 1
< p > trunc
的输出必须转换为INTEGER
类型。但是可以在不使用trunc
的情况下完成。因此,这变得很简单。
select (random() * 9)::INTEGER + 1
生成一个1到10的整数,包括1和10。
如果是任何数字(浮点数),请参考用户80168的答案。即不要将其转换为INTEGER
。
例子
SELECT RAND()*(min-max)+max
试试这个:
Select (ROW_NUMBER() OVER (ORDER BY ItemDesc ASC)+15000) as ID, ItemCode, ItemDesc
实际上我不知道你想要什么。
试试这个
INSERT INTO my_table (my_column)
SELECT
(random() * 10) + 1
;
这个存储过程将一个随机数插入到表中。注意,它会不断地插入数字。当你得到足够的数字时,请停止执行它。
为游标创建一个表:
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
trunc()
函数返回与输入相同的数据类型(如手册所述)。 您需要将结果转换为整数:trunc(random() * 20)::int
。 - user330315random()
返回一个小于1的值,当乘以9时大于或等于9?实际上,即使可能性存在,由于约15位数字的精度,这种情况也是微乎其微的。 - user533832width_bucket(random(), 0, 1, 10)
作为替代方案。 - user533832