首页 文章

不使用NewID的SQL上的随机数()

提问于
浏览
5

您好我想使用以下语句生成一个唯一随机数:

Convert(int, (CHECKSUM(NEWID()))*100000) AS [ITEM]

因为当我在“from”上使用连接子句时,它会使用NEWID()生成双重寄存器

我使用的是SQL Server 2000

  • PD:当我使用Rand()时,它可能会重复1次100,000的概率,但这是非常重要的,所以它必须是重复生成的随机值的概率的0%

我的带有NewID()的查询和SELECT语句的结果是重复的(x2)我的QUery没有NewID()并且在SELECT语句中使用Rand()是单个(x1)但是重复产生的随机值的概率是不确定的但 exists!

谢谢!

5 回答

  • 0

    它溢出了吗?

    CAST(CHECKSUM(NEWID()) AS bigint) * CAST(100000 AS bigint) AS [ITEM]
    
    CAST(CAST(CHECKSUM(NEWID()) AS bigint) * CAST(100000 AS bigint) % 2100000000 AS int) AS [ITEM]
    

    编辑:

    没有0%重复次数的可能性

    CHECKSUM(NEWID()))返回一个有40亿行的整数 . birthday paradox意味着碰撞的机会当然要高得多 .

    Bigint(上图)或小数(38,0)为您提供了更多的空间,但只能减少碰撞的几率,但绝不会消除 .

    但仍然不明白你为什么要尝试加入一个独特的随机数...

  • 0
  • 9

    在SQL Server中,您可以使用它来生成随机数,或指定参数之间的随机整数

    DECLARE @RandomNumber float
    DECLARE @RandomInteger int
    DECLARE @MaxValue int
    DECLARE @MinValue int
    
    SET @MaxValue = 4
    SET @MinValue = 2
    
    SELECT @RandomNumber = RAND()
    
    SELECT @RandomInteger = ((@MaxValue + 1) - @MinValue) * @RandomNumber + @MinValue
    
    SELECT @RandomNumber as RandomNumber, @RandomInteger as RandomInteger
    
  • 1

    如果您正在使用MySQL

    SELECT RAND();
    

    MySQL doc:http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand

    如果你正在使用Postgres

    SELECT RANDOM();
    

    Postgres doc:http://www.postgresql.org/docs/8.0/static/functions-math.html

  • 0

    使用一位数字更新列

    update  [dbo].[AccomodationRatings]
    set Rate =rand(CHECKSUM(NEWID()))*10
    WHERE Rate >0
    

相关问题