gpt4 book ai didi

sql - 使用 SQL 生成唯一的随机数

转载 作者:行者123 更新时间:2023-12-03 01:53:56 24 4
gpt4 key购买 nike

我有一些 SQL 代码,它使用以下技术生成随机数:

DECLARE @Random1 INT, @Random2 INT, @Random3 INT, @Random4 INT, @Random5 INT, @Random6 INT, @Upper INT, @Lower INT
---- This will create a random number between 1 and 49
SET @Lower = 1 ---- The lowest random number
SET @Upper = 49; ---- The highest random number


with nums as (
select @lower as n
union all
select nums.n+1
from nums
where nums.n < @Upper
),
randnums as
(select nums.n, ROW_NUMBER() over (order by newid()) as seqnum
from nums
)
select @Random1 = MAX(case when rn.seqnum = 1 then rn.n end),
@Random2 = MAX(case when rn.seqnum = 2 then rn.n end),
@Random3 = MAX(case when rn.seqnum = 3 then rn.n end),
@Random4 = MAX(case when rn.seqnum = 4 then rn.n end),
@Random5 = MAX(case when rn.seqnum = 5 then rn.n end),
@Random6 = MAX(case when rn.seqnum = 6 then rn.n end)
from randnums rn;

select @Random1, @Random2, @Random3, @Random4, @Random5, @Random6

我的问题是这个数字生成的随机性如何?还有另一种更“随机”的方法吗?

我正在使用:

Microsoft SQL Server 2008 (SP3) - 10.0.5512.0 (X64)   Aug 22 2012 19:25:47   Copyright (c) 1988-2008 Microsoft Corporation  Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) 

大多数解决方案的问题是您最终会得到如下值:14,29,8,14,27,27我不能有重复的数字!

最佳答案

我想你可以做这样更简单、更容易的事情

DECLARE @Upper INT;
DECLARE @Lower INT;
SET @Lower = 1; /* -- The lowest random number */
SET @Upper = 49; /* -- The highest random number */


SELECT @Lower + CONVERT(INT, (@Upper-@Lower+1)*RAND());

为了获得不重复的随机数,这可以完成工作

WITH CTE 
AS
(
SELECT randomNumber, COUNT(1) countOfRandomNumber
FROM (
SELECT ABS(CAST(NEWID() AS binary(6)) %49) + 1 randomNumber
FROM sysobjects
) sample
GROUP BY randomNumber
)
SELECT TOP 5 randomNumber
FROM CTE
ORDER BY newid()

要设置最高限制,您可以将 49 替换为您的最高限制数字。

关于sql - 使用 SQL 生成唯一的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19875588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com