使用Oracle 11.我们需要在一组字符串中删除半冒号和半冒号右侧的任何内容。
字符串可能包含也可能不包含半结肠。如果没有半冒号,我们将返回整个字符串。
我可以看到只有在存在分号的情况下才使用CASE
来改变字符串,但是我确定要处理删除半冒号以及分号后面的所有内容的语法。
字符串
123456;789154
会返回123456
123456789
会返回123456789
Case
When string1 like ('%;%')
then substr( …….) or trim(…)
Else string1
End
As trimmedstring
任何和所有帮助/指针赞赏
答案 0 :(得分:3)
假设您必须从字符串中的第一个分号开始删除任何内容,这可能是一种方式:
with test(s) as (
select '123456;789154' from dual union all
select '123456;789154;567' from dual union all
select '123456789' from dual
)
select s,
case
when instr(s, ';') = 0 then s
else substr(s, 1, instr(s, ';')-1)
end
from test
使用正则表达式,您可以采用更紧凑但效率更低的方式获得相同的结果:
regexp_substr(s, '[^;]*')
答案 1 :(得分:-1)
试试这个:
Select LEFT(Name, Case
WHEN CHARINDEX(';', Name) = 0
then Len(Name)
else CHARINDEX(';', Name)-1 END) from CustomerDetails