Oracle regexp_substr获取字符串的第一部分

时间:2016-07-13 15:26:14

标签: oracle

我被困在这里。我正在使用oracle,我想在第一次出现' |'之前获取字符串的第一部分。这是我的查询,但它返回最后一部分,即25.0。我希望它返回第一部分,即53.我如何实现这一目标?

select regexp_substr('53|100382951130|25.0', '[^|]+$',  1,1) as part1 from dual

1 个答案:

答案 0 :(得分:2)

假设您总是至少出现一次'|',您可以使用以下内容,而不使用正则表达式:

with test(string) as ( select '53|100382951130|25.0' from dual)    
select substr(string, 1, instr(string, '|')-1)
from test

您甚至可以使用正则表达式来实现相同的功能,甚至可以处理没有'|'的情况:

with test(string) as (
    select '53|100382951130|25.0' from dual union all
    select '1234567' from dual)    
select string,
       substr(string, 1, instr(string, '|')-1),
       regexp_substr(string, '[^|]*')
from test

你甚至可以处理没有'|'没有正则表达式的情况:

with test(string) as (
    select '53|100382951130|25.0' from dual union all
    select '1234567' from dual)   
select string,
       substr(string, 1, instr(string, '|')-1),
       regexp_substr(string, '[^|]*'),
       substr(string, 1,
                         case
                           when instr(string, '|') = 0
                             then length(string)
                           else 
                             instr(string, '|')-1
                         end
             )
from test