数据库中的随机数

时间:2009-01-29 12:40:07

标签: sql random

编辑How do I return random numbers as a column in SQL Server 2005?

重复

您好 如何在mssql server 2005中生成随机数。

例如:当我从表中选择500行时,每行必须有一个生成的随机数,必须在运行时生成数字

更新:我需要最快的方法,从大型表格生成数字,日期部分,相同的魔法计算在大量行中反复缓慢

更新感谢您的回答,但是o终于使用了这个解决方案

SELECT ABS(CHECKSUM(NewId())) % 10 - 5 AS Random

对于从-5到5的随机数,奖金与每个数字的出现次数大致相同

4 个答案:

答案 0 :(得分:3)

SELECT TOP 500
    CONVERT(INT, CONVERT(VARBINARY(16), NEWID()))
FROM
    dbo.MyTable

答案 1 :(得分:3)

我喜欢这个技巧,真棒......

-- 500 random numbers from 0 to 499 
select top 500 ABS(CAST(CAST(NEWID() AS VARBINARY) AS int)) % 500 from sysobjects 

答案 2 :(得分:0)

easy google1 2 ...


  

在SELECT语句中返回随机数

实现时, SQL Server中的RAND()函数不允许在SELECT语句中返回每行的不同随机数。例如,如果执行此操作:

SELECT Rand() as RandomNumber, *
FROM Northwind..Customers

您将反复看到相同的数字。但是,有时,您可能希望在SELECT中返回每行随机生成的数字。这是使用UDF在SQL Server 2000中执行此操作的一种方法。

首先,我们需要创建一个返回单个随机数的视图:

CREATE VIEW vRandNumber
AS
SELECT RAND() as RandNumber

视图是必要的,因为通常在UDF中我们不能使用rand()函数,因为这会使函数不确定。我们可以通过使用View来欺骗UDF接受随机数。

设置完成后,我们就可以创建我们的函数了:

CREATE FUNCTION RandNumber()
RETURNS float
AS
  BEGIN
  RETURN (SELECT RandNumber FROM vRandNumber)
  END

最后,您可以在任何SELECT中使用此函数,现在返回每行0到1之间的随机数:

SELECT dbo.RandNumber(), *
FROM Northwind..Customers

如果您愿意接受种子,或者允许这样的范围参数,您可以在RandNumber函数中获得更好的效果:

CREATE FUNCTION RandNumber2(@Min int, @Max int)
RETURNS float
AS
 BEGIN
 RETURN @Min + (select RandNumber from RetRandNumber) * (@Max-@Min)
 END

答案 3 :(得分:0)

知道你想要随机数的原因可能会有所帮助。例如,如果您只想随机对结果进行排序,则可以执行ORDER BY NEWID(),而不必担心生成随机数。如果您以后确实需要随机数,请使用@Tim引用的解决方案。