在这个解决方案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
例如,如果我只使用A
和B
(level <=2
而不是level <= 26
),并且我想获得最多3个字符的组合(level <= 3
),我得到:
A
B
AA
AB
BA
BB
AAA
AAB
ABA
ABB
BAA
BAB
BBA
BBB
基本上,这不仅使用递归来生成起始字符集,而且还使用递归来生成字符串,该字符串的参数长度由查询对字符集
进行递归的次数(level
)获得。