为 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)
您的查询类似于
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
我想为每一行生成一个介于 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)
您的查询类似于
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