使用SQL Server时,我需要获取随机数,但每次运行代码时都需要相同的结果。通常,这意味着使用种子,但据我所知,SQL的RAND函数使用以下公式:
RAND(@Seed) = 0.00001863297* @Seed + 0.71357336整数被截断了,你知道,这不是特别随机的。Here's a chart I made of it because I couldn't quite believe it myself。
这是通过以下代码实现的:
DECLARE @i int = 1;
CREATE TABLE #Test (
seed int
, ran float);
WHILE @i < 10000
BEGIN
INSERT INTO #Test
( seed
, ran)
SELECT @i*23
, Rand(@i*23)
SET @i = @i + 1;
END;不管怎样,在SQL中有没有办法从种子中生成真正的随机数呢?
发布于 2017-05-17 07:21:23
您可以使用newid()和rand,如下所示
select convert(int,rand(convert(varbinary,newid()))*@seed)随机插入10000个数字,而不是while循环
insert into #test
select top (10000) seed = row_number() over (order by (select null))
,ran = convert(int,rand(convert(varbinary,newid()))*10000)
from master..spt_values n1, master..spt_values n2发布于 2017-05-17 08:00:17
你错过了种子的要点。
您只能在第一次调用RAND()时使用seed参数。后续调用不应使用该参数。
阅读docs。
具有相同种子值的
重复调用RAND()将返回相同的结果。对于一个连接,如果使用指定的种子值调用RAND(),则所有后续的RAND()调用都会基于种子的RAND()调用生成结果。
所示的示例SELECT RAND(100), RAND(), RAND()将始终返回相同的结果。
https://stackoverflow.com/questions/44013083
复制相似问题