Oracle で、連続した区切り文字のチルダ (~) で区切られた一般的な文字列があります。たとえば、文字列は「apple~orange~~mango~~grapes」です。行に変換する必要がありますが、注意すべき重要な点の 1 つは、セパレーターが単一のチルダではなく連続したチルダであるということです。出力は次のようになります。
りんご~オレンジ
マンゴー
ぶどう
回避策は instr および substr oracle 関数を使用して既に行われていますが、Oracle 正規表現を使用したよりクリーンなソリューションが必要です。以下のクエリを使用してみましたが、正しい解決策が得られませんでした:
WITH str AS (SELECT 'apple~orange~~mango~~grapes' str FROM dual),
cnt AS (SELECT LEVEL sno FROM dual CONNECT BY LEVEL < 5)
SELECT regexp_substr (str, '[^~]+', 1, sno) FROM str CROSS JOIN cnt;