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

SELECT table_name, RAND() magic_number 
FROM information_schema.tables 

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

这是为Microsoft SQL Server 2000。


当前回答

如果你不需要它是一个整数,而是任何随机的唯一标识符,你可以使用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
RAND(CHECKSUM(NEWID()))

上面将生成一个(伪)随机数,介于0和1之间,不排除。如果在选择中使用,因为种子值每一行都在变化,它将为每一行生成一个新的随机数(但不保证每一行生成一个唯一的数字)。

当与10的上限组合时(产生数字1 - 10):

CAST(RAND(CHECKSUM(NEWID())) * 10 as INT) + 1

transact - sql批量文档:

演员():https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql 兰德():http://msdn.microsoft.com/en-us/library/ms177610.aspx (): http://msdn.microsoft.com/en-us/library/ms189788.aspx校验和 NEWID (): https://learn.microsoft.com/en-us/sql/t-sql/functions/newid-transact-sql

试试这个:

SELECT RAND(convert(varbinary, newid()))*(b-a)+a magic_number 

a是较小的数,b是较大的数

select round(rand(checksum(newid()))*(10)+20,2)

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

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

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

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

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