生成64到5个幂字符代码然后随机排序的最快方法

时间:2016-07-07 14:29:55

标签: sql sql-server tsql

好的,这是我正在研究的一个非常有趣的部分,最后,我希望有一些1,073,741,824个独特的五位数字符代码,但随机排序。

基本上,我在表(char(1)的一个字段)中有64个ascii字符,区分大小写。我想要做的是生成总组合,然后随机排序,或者获得随机访问和标记它们的方法。

我认为我有办法在后脑中执行后者(保留另一个表中剩余的数字的总和,将其用作随机种子,选择一个然后从表中删除它然后递减总计一个)。

但是,我试图找出最快捷的方法来一次性生成所有五位数的字符代码。我想我可能必须从构建前三个字符开始,然后运行循环来完成第四个和第五个字符。我知道,对于基表,所占用的存储量本身应该是5.12GB的信息。

只是想知道是否有其他SQL专家有更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

一个选项是CROSS JOIN您的单个字符表4次(每个附加字符超过第一个字符一次),然后随机排序记录:

SELECT t1.field + t2.field + t3.field + t4.field + t5.field AS code
FROM yourTable t1 CROSS JOIN
     yourTable t2 CROSS JOIN
     yourTable t3 CROSS JOIN
     yourTable t4 CROSS JOIN
     yourTable t5
ORDER BY NEWID()

答案 1 :(得分:0)

通过循环,我的意思是从基本字符表中获取x行,然后进行交叉连接,这样就可以使用较小的记录集。

看,如果我已经有3位数代码和64个字符,我可以做类似的事情

declare @x int = 1, @low int = 8 

while @low <= 64
begin
    insert into [4char table name] 
    select x.C + a.Code
    FROM base3codes a CROSS JOIN
    (select C from basec WHERE CID BETWEEN @x AND @low) as x

    select @x = @x + 8, @low = @low + 8
end

然后在五个字符长度级别执行相同操作。我认为这会更快地运行