好的,这是我正在研究的一个非常有趣的部分,最后,我希望有一些1,073,741,824个独特的五位数字符代码,但随机排序。
基本上,我在表(char(1)的一个字段)中有64个ascii字符,区分大小写。我想要做的是生成总组合,然后随机排序,或者获得随机访问和标记它们的方法。
我认为我有办法在后脑中执行后者(保留另一个表中剩余的数字的总和,将其用作随机种子,选择一个然后从表中删除它然后递减总计一个)。
但是,我试图找出最快捷的方法来一次性生成所有五位数的字符代码。我想我可能必须从构建前三个字符开始,然后运行循环来完成第四个和第五个字符。我知道,对于基表,所占用的存储量本身应该是5.12GB的信息。
只是想知道是否有其他SQL专家有更好的方法来做到这一点。
答案 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
然后在五个字符长度级别执行相同操作。我认为这会更快地运行