表中的每一行都需要一个不同的随机数。下面的代码对每一行使用相同的随机值。
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。
当前回答
使用newid ()
select newid()
或者可能是这个
select binary_checksum(newid())
其他回答
Rand()函数将生成相同的随机数,如果在表SELECT查询中使用。如果对Rand函数使用种子,同样适用。另一种方法是使用这个:
SELECT ABS(CAST(CAST(NEWID() AS VARBINARY) AS INT)) AS [RandomNumber]
从这里得到的信息,很好地解释了问题。
很简单:
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
如果你需要一个特定的随机数你可以使用递归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
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。