为 SQL 服务器中的每一行生成 0.85 到 0.95 之间的随机数

Generate random number between 0.85 and 0.95 for each row in SQL Server

我想为每一行生成一个介于 0.85 和 0.95 之间的随机数。

起初我尝试使用 (rand()*(0.85-0.95)+0.95) 但每一行都生成了相同的数字。

我的查询看起来像这样:

select
case when x=1 then (rand()*(0.85-0.95)+0.95) else 0
from abcd

也许使用NEWID来生成随机数;因为 RAND() 将为 table 中的所有行提供相同的值,因为种子不会改变。我们可以使用 NEWID 为每行提供新的种子值并获得差异随机数。

所以你的情况更像是

 (RAND(CHECKSUM(NEWID()))*(0.85-0.95)+0.95)

fiddle

您的查询类似于

select
case when x=1 then (RAND(CHECKSUM(NEWID()))*(0.85-0.95)+0.95) else 0
from abcd

RAND() returns 给定语句的相同数字。一种解决方案是使用 NEWID()。类似于:

CONVERT( DECIMAL(2, 2), .85 + (.95 - .85 )*RAND(CHECKSUM(NEWID())))

Fiddle here