在Sql函数RAND()中种子的目的是什么?

时间:2015-12-03 09:38:02

标签: sql sql-server tsql

我知道Rand()用于生成小于1且大于0的随机数。 如果提供种子,则每次执行时都会在同一连接中为同一种子生成相同的值。 同样select RAND(1),RAND()每次在同一连接中执行时都会给你相同的结果集。

但种子有用吗?

2 个答案:

答案 0 :(得分:3)

它有点隐含,但记录良好here

  

具有相同种子值的RAND()的重复调用返回相同的结果。

     

对于一个连接,如果使用指定的种子值调用RAND(),所有后续的RAND()调用都会根据种子RAND()调用生成结果。例如,以下查询将始终返回相同的数字序列。

     

SELECT RAND(100), RAND(), RAND()

因此,SELECT RAND(1), RAND()将返回相同的数字,而SELECT RAND(), RAND()将赢得

答案 1 :(得分:2)

一组数字已经随机生成一次,但在每次调用时保持不变,在需要共享此特定集的情况下非常有用。换句话说,种子确定地映射到一组正态分布的数字;如果种子的所有用户使用相同的PRNG,他们将接收相同(无限)的伪随机数集,而无需进一步同步。

一个示例用例:“这是一张随机洗牌的牌组,看看你的AI能够在多次与同一牌组比赛中发挥作用。”

或者“对于这次Minecraft比赛,你将使用种子#123456789生成的世界,用它做一些很棒的事情。”

另见:http://rednuht.org/genetic_cars_2/有一个“种子”字段,它将生成相同的轨道集,这对于测试同一地形上的各种种群非常有用。在这里,您可以以交互方式查看共享种子的效果。