我想我有一个复杂的要求.
这是使用Oracle 10.2的组合排列,我能够使用笛卡尔连接解决它,但我认为它需要一些改进才能使它更简单,更灵活.
主要行为.
输入字符串:'一二'
输出:'一''两''一二''二一'
对于我的解决方案,我已将字符串数量限制为5(请注意,输出是靠近阶乘的数字)
SQL:
with My_Input_String as (select 1 as str_id, 'alpha beta omega gama' as str from dual )
--------logic-------
, String_Parse as (
SELECT REGEXP_SUBSTR(str, '[^ ]+', 1, ROWNUM) str
FROM My_Input_String
where rownum < 6 -- string limitation --
CONNECT BY level <= LENGTH(REGEXP_REPLACE(str, '([^ ])+|.', '\1') )
)
--------CRAP select need refactoring-------
select str from String_Parse
union
select REGEXP_REPLACE(trim(s1.str||' '||s2.str||' '||s3.str||' '||s4.str||' '||s5.str), '( ){2,}', ' ') as str
from …Run Code Online (Sandbox Code Playgroud)