表中的每一行都需要一个不同的随机数。下面的代码对每一行使用相同的随机值。
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。
当前回答
Update my_table set my_field = CEILING((RAND(CAST(NEWID() AS varbinary)) * 10))
1到10之间的数字。
其他回答
很简单:
DECLARE @rv FLOAT;
SELECT @rv = rand();
这将把一个0-99之间的随机数放入表中:
CREATE TABLE R
(
Number int
)
DECLARE @rv FLOAT;
SELECT @rv = rand();
INSERT INTO dbo.R
(Number)
values((@rv * 100));
SELECT * FROM R
如果你想生成一个1到14之间的随机数。
SELECT CONVERT(int, RAND() * (14 - 1) + 1)
OR
SELECT ABS(CHECKSUM(NewId())) % (14 -1) + 1
回答老问题,但是这个答案之前没有提供,希望这对通过搜索引擎找到这个结果的人有用。
在SQL Server 2008中,引入了一个新函数CRYPT_GEN_RANDOM(8),它使用CryptoAPI生成一个加密强随机数,返回为VARBINARY(8000)。这里是文档页面:https://learn.microsoft.com/en-us/sql/t-sql/functions/crypt-gen-random-transact-sql
因此,为了获得一个随机数,你可以简单地调用函数并将其强制转换为必要的类型:
select CAST(CRYPT_GEN_RANDOM(8) AS bigint)
或者要获得一个介于-1和+1之间的浮点数,你可以这样做:
select CAST(CRYPT_GEN_RANDOM(8) AS bigint) % 1000000000 / 1000000000.0
尝试在RAND中使用种子值(seedInt)。RAND()每条语句只执行一次,这就是为什么每次都看到相同的数字。
Update my_table set my_field = CEILING((RAND(CAST(NEWID() AS varbinary)) * 10))
1到10之间的数字。