表中的每一行都需要一个不同的随机数。下面的代码对每一行使用相同的随机值。

SELECT table_name, RAND() magic_number 
FROM information_schema.tables 

我想从中得到一个INT或FLOAT。接下来,我将使用这个随机数从已知日期创建一个随机日期偏移量,例如从开始日期的1-14天偏移量。

这是为Microsoft SQL Server 2000。


当前回答

您是否在每一行中都有一个整数值,可以作为种子传递给RAND函数?

要得到1到14之间的整数,我相信这是可行的:

FLOOR( RAND(<yourseed>) * 14) + 1

其他回答

Rand()函数将生成相同的随机数,如果在表SELECT查询中使用。如果对Rand函数使用种子,同样适用。另一种方法是使用这个:

SELECT ABS(CAST(CAST(NEWID() AS VARBINARY) AS INT)) AS [RandomNumber]

从这里得到的信息,很好地解释了问题。

您需要为每一行调用RAND()。这里有一个很好的例子

https://web.archive.org/web/20090216200320/http://dotnet.org.za/calmyourself/archive/2007/04/13/sql-rand-trap-same-value-per-row.aspx

尝试在RAND中使用种子值(seedInt)。RAND()每条语句只执行一次,这就是为什么每次都看到相同的数字。

如果你不需要它是一个整数,而是任何随机的唯一标识符,你可以使用newid()

SELECT table_name, newid() magic_number 
FROM information_schema.tables
select round(rand(checksum(newid()))*(10)+20,2)

这里的随机数在20和30之间。 四舍五入最多会给出两位小数点后的数字。

如果你想要负数,你可以这样做

select round(rand(checksum(newid()))*(10)-60,2)

那么最小值将是-60,最大值将是-50。