表中的每一行都需要一个不同的随机数。下面的代码对每一行使用相同的随机值。
SELECT table_name, RAND() magic_number
FROM information_schema.tables
我想从中得到一个INT或FLOAT。接下来,我将使用这个随机数从已知日期创建一个随机日期偏移量,例如从开始日期的1-14天偏移量。
这是为Microsoft SQL Server 2000。
表中的每一行都需要一个不同的随机数。下面的代码对每一行使用相同的随机值。
SELECT table_name, RAND() magic_number
FROM information_schema.tables
我想从中得到一个INT或FLOAT。接下来,我将使用这个随机数从已知日期创建一个随机日期偏移量,例如从开始日期的1-14天偏移量。
这是为Microsoft SQL Server 2000。
当前回答
select round(rand(checksum(newid()))*(10)+20,2)
这里的随机数在20和30之间。 四舍五入最多会给出两位小数点后的数字。
如果你想要负数,你可以这样做
select round(rand(checksum(newid()))*(10)-60,2)
那么最小值将是-60,最大值将是-50。
其他回答
我有时对所选“答案”的问题是,分布并不总是均匀的。如果您需要在大量行中随机分布1 - 14,您可以这样做(我的数据库有511个表,所以这是可行的。如果你的行数比你的随机数跨度少,这就行不通了):
SELECT table_name, ntile(14) over(order by newId()) randomNumber
FROM information_schema.tables
这种方法与普通随机解相反因为它保持了数字的顺序并使另一列随机化。
请记住,我的数据库中有511个表(这只与我们从information_schema中选择的b/c相关)。如果我把前面的查询放到临时表#X中,然后对结果数据运行这个查询:
select randomNumber, count(*) ct from #X
group by randomNumber
我得到这个结果,显示我的随机数非常均匀地分布在许多行中:
您是否在每一行中都有一个整数值,可以作为种子传递给RAND函数?
要得到1到14之间的整数,我相信这是可行的:
FLOOR( RAND(<yourseed>) * 14) + 1
select ABS(CAST(CAST(NEWID() AS VARBINARY) AS INT)) as [Randomizer]
一直对我有效吗
select round(rand(checksum(newid()))*(10)+20,2)
这里的随机数在20和30之间。 四舍五入最多会给出两位小数点后的数字。
如果你想要负数,你可以这样做
select round(rand(checksum(newid()))*(10)-60,2)
那么最小值将是-60,最大值将是-50。
Update my_table set my_field = CEILING((RAND(CAST(NEWID() AS varbinary)) * 10))
1到10之间的数字。