首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中,有没有办法从种子中获得实际的随机分布?

问在SQL中,有没有办法从种子中获得实际的随机分布?
EN

Stack Overflow用户
提问于 2017-05-17 07:15:53
回答 2查看 54关注 0票数 0

使用SQL Server时,我需要获取随机数,但每次运行代码时都需要相同的结果。通常,这意味着使用种子,但据我所知,SQL的RAND函数使用以下公式:

代码语言:javascript
复制
RAND(@Seed) = 0.00001863297* @Seed + 0.71357336

整数被截断了,你知道,这不是特别随机的。Here's a chart I made of it because I couldn't quite believe it myself。

这是通过以下代码实现的:

代码语言:javascript
复制
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中有没有办法从种子中生成真正的随机数呢?

EN

回答 2

Stack Overflow用户

发布于 2017-05-17 07:21:23

您可以使用newid()和rand,如下所示

代码语言:javascript
复制
select convert(int,rand(convert(varbinary,newid()))*@seed)

随机插入10000个数字,而不是while循环

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2017-05-17 08:00:17

你错过了种子的要点。

您只能在第一次调用RAND()时使用seed参数。后续调用不应使用该参数。

阅读docs。

具有相同种子值的

重复调用RAND()将返回相同的结果。对于一个连接,如果使用指定的种子值调用RAND(),则所有后续的RAND()调用都会基于种子的RAND()调用生成结果。

所示的示例SELECT RAND(100), RAND(), RAND()将始终返回相同的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44013083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档