区切り文字としてスペースを使用して、長さに基づいてOracleで文字列を分割したいと思います。
例えば、
MY_STRING="welcome to programming world"
私の出力は
STRING1="welcome to "
STRING2="programming "
文字列の長さは最大13文字である必要があります。26番目以降の単語は無視できます。
使用している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
、まったくきれいではありません。