0

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;
4

2 に答える 2

0

これを試して、

select 
          t.str
         , regexp_substr (t.str, '[^~(?=~)]+', 1, rn) spl
    from YOURTABLE t
     cross
     join (select rownum rn
       from (select max (length (regexp_replace (t.str, '[^~~]+'))) + 1 mx
                     from YOURTABLE t
                  )
          connect by level <= mx
          )
   where regexp_substr (t.str,'[^~(?=~)]+' , 1, rn) is not null)
于 2013-04-23T06:08:38.340 に答える