表中的每一行都需要一个不同的随机数。下面的代码对每一行使用相同的随机值。
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。
当前回答
很简单:
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
其他回答
尝试在RAND中使用种子值(seedInt)。RAND()每条语句只执行一次,这就是为什么每次都看到相同的数字。
使用newid ()
select newid()
或者可能是这个
select binary_checksum(newid())
如果你不需要它是一个整数,而是任何随机的唯一标识符,你可以使用newid()
SELECT table_name, newid() magic_number
FROM information_schema.tables
如果你需要一个特定的随机数你可以使用递归CTE:
;WITH A AS (
SELECT 1 X, RAND() R
UNION ALL
SELECT X + 1, RAND(R*100000) --Change the seed
FROM A
WHERE X < 1000 --How many random numbers you need
)
SELECT
X
, RAND_BETWEEN_1_AND_14 = FLOOR(R * 14 + 1)
FROM A
OPTION (MAXRECURSION 0) --If you need more than 100 numbers
回答老问题,但是这个答案之前没有提供,希望这对通过搜索引擎找到这个结果的人有用。
在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