生成所有可能的数字集合的组合



在这个解决方案https://stackoverflow.com/a/33565783/9737797非常感谢https://stackoverflow.com/users/3989608/lalit-kumar-b先生lalit Kumar B,给我们所有可能的组合。但是我必须使用另一种组合来连接其他长度的查询命令。是否有可能,我如何动态地设置这个组合的长度?谢谢你提前。致以最亲切的问候。

查询的方法是:

WITH combinations AS
(SELECT chr( ascii('A')+level-1 ) c FROM dual CONNECT BY level <= 26)
SELECT * FROM combinations
UNION ALL
SELECT c1.c || c2.c FROM combinations c1, combinations c2
UNION ALL SELECT c1.c || c2.c || c3.c FROM combinations c1, combinations c2, combinations c3;

结果(长度2):00 01 11 10

其他组合结果(长度三):000 001 010 011 100 101 110 111

我不确定我是否完全理解你的需求;如果是这样,这可能是一种方法:

with characters(c) as
(
select chr( ascii('A') + level -1)
from dual
connect by level <= 2                      /* 2 instead of 26, just to try it */
)
select replace (sys_connect_by_path(c, ' '), ' ', '') as result
from characters
connect by level <= 3                           /* the length you need  */
order by level, result

例如,如果我只使用AB(level <=2而不是level <= 26),并且我想获得最多3个字符的组合(level <= 3),我得到:

A
B
AA
AB
BA
BB
AAA
AAB
ABA
ABB
BAA
BAB
BBA
BBB

基本上,这不仅使用递归来生成起始字符集,而且还使用递归来生成字符串,该字符串的参数长度由查询对字符集

进行递归的次数(level)获得。

最新更新