编辑: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的随机数,奖金与每个数字的出现次数大致相同
答案 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 google:1 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引用的解决方案。