Answers:
如果用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)
trunc()
返回与输入相同的数据类型(如手册中所述)。您需要将结果转换为整数:trunc(random() * 20)::int
总结和简化,可以使用:
-- 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;
SELECT floor(random() * 10 + 1);
(trunc(random()* 10)%10)+ 1
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](即包括1和10)的INTEGER输出。
有关任何数字(浮点数),请参见user80168的答案。即不要将其转换为INTEGER
。
其实我不知道你想要这个。
试试这个
INSERT INTO my_table (my_column)
SELECT
(random() * 10) + 1
;
此存储过程将rand号插入到表中。往外看,它会插入一个无尽的数字。当您获得足够的数字时,停止执行它。
为光标创建一个表:
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