私は複雑な要件があると思います。Oracleの文字列組み合わせ置換
これは、Oracle 10.2を使用したコンビナトリアル・パーミュテーションであり、デカルト結合を使用して解決することができましたが、シンプルで柔軟性を高めるためにはいくつかの改善が必要だと思います。
主な動作。
入力文字列: '1 2つの'
出力: '1' '2' '1 2' '2 1' 私が制限されてきた私の解決策については
文字列の数は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
(select str from String_Parse union select ' ' from dual) s1,
(select str from String_Parse union select ' ' from dual) s2,
(select str from String_Parse union select ' ' from dual) s3,
(select str from String_Parse union select ' ' from dual) s4,
(select str from String_Parse union select ' ' from dual) s5
where
--
s1.str <> s2.str and s1.str <> s3.str and s1.str <> s4.str and s1.str <> s5.str
--
and s2.str <> s3.str and s2.str <> s4.str and s2.str <> s5.str
--
and s3.str <> s4.str and s3.str <> s5.str
--
and s4.str <> s5.str
SQLでなければならないのですか?plsqlも使用できますか? – Rene
固定数の文字列要素を使用しますか?変化する可能性がある場合は、PL/SQLのルートを回避する方法がわかりません。 「フレキシブル」という言葉を使用することは、あなたが考えていることを示唆しています。 – APC
はい、plsqlを使用して実行できます。文字列要素の数に関しては – Metl