、あなたが使用することができます:
with test(s) as (
select 'abc/ab ' from dual union all
select 'a1/a1 ' from dual union all
select 'a1/a1/a2' from dual union all
select 'efg/a1/z' from dual union all
select 'efg' from dual /* no slash in the string */
)
select s, substr(s, 1,
case /* to handle the case no slash exists in the string */
when instr(s, '/', -1) = 0 then length(s)
else instr(s, '/', -1) -1
end
)
from test
います:
abc/ab abc
a1/a1 a1
a1/a1/a2 a1/a1
efg/a1/z efg/a1
efg efg
をINSTR
は、スラッシュ(-1パラメータ)の最後の出現と、サブストリングを見つけるために使用されます必要に応じて文字列をトリムします。
これはMathguyの提案によると、以下のように、よりコンパクトに書き換えることができます。
select s,
case
when instr(s, '/') > 0 then substr(s, 1, instr(s, '/', -1) -1)
else s
end
from test
文字列の少なくともスラッシュは、単に、存在する場合ここでの考え方は、コール機能にありますスラッシュがない場合は文字列自体を返します。
またはさえをINSTRは後方カウント/最初の位置を取得します、instr(...) - 1)else s end'。文字列にスラッシュがない場合は 'substr'と' length'コールを避けてください。 – mathguy
@mathguy:読んだほうがはっきりしています。答えを投稿するのを待って – Aleksej
Lol - いいえ、私はあなたの投稿を編集します(あなたの答えです、これはほんの小さな変更です)。あなたは仕事をさせるでしょう! (... OPの入力でスラッシュのない文字列が可能であるかどうかもわかりません) – mathguy