仅显示特殊字符左侧的字符

时间:2017-04-19 13:51:47

标签: sql oracle oracle11g

使用Oracle 11.我们需要在一组字符串中删除半冒号和半冒号右侧的任何内容。

字符串可能包含也可能不包含半结肠。如果没有半冒号,我们将返回整个字符串。

我可以看到只有在存在分号的情况下才使用CASE来改变字符串,但是我确定要处理删除半冒号以及分号后面的所有内容的语法。

字符串

123456;789154会返回123456

123456789会返回123456789

Case
When string1 like ('%;%')
         then substr( …….)  or trim(…)

Else string1

End
As trimmedstring

任何和所有帮助/指针赞赏

2 个答案:

答案 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