3

区切り文字としてスペースを使用して、長さに基づいてOracleで文字列を分割したいと思います。

例えば、

MY_STRING="welcome to programming world"

私の出力は

STRING1="welcome to "
STRING2="programming "

文字列の長さは最大13文字である必要があります。26番目以降の単語は無視できます。

4

1 に答える 1

1

使用しているOracleのバージョンについては言及していません。10g 以上を使用している場合は、正規表現を使用して必要なものを取得できます。

with spaces as (
 select regexp_instr('welcome to programming world' || ' '
                    , '[[:space:]]', 1, level) as s
   from dual
connect by level <= regexp_count('welcome to programming world' || ' '
                                , '[[:space:]]')
        )
, actual as (
 select max(case when s <= 13 then s else 0 end) as a
      , max(case when s <= 26 then s else 0 end) as b
   from spaces
        )
select substr('welcome to programming world',1,a)
     , substr('welcome to programming world',a, b - a)
  from actual

これにより、すべてのスペースの位置インデックスが検出され、最も近いが 14 未満のスペースが検出されます。最後に、単純なを使用しsubstrて文字列を分割します。文字列には末尾のスペースがあるため、これが必要になる場合がありますtrim

文字列が 26 文字未満の場合に最後の単語が削除されないように、文字列をスペースで連結して、末尾にスペースがあることを確認する必要があります。

instr以前のバージョンを使用していると仮定すると、 and と一緒に何かをハックできますがlength、まったくきれいではありません。

于 2012-08-02T08:16:52.843 に答える