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

Oracle regexp_substr获取字符串的第一部分,oracle,Oracle,我被困在这里了。我正在使用oracle,我希望在第一次出现“|”之前获取字符串的第一部分。这是我的查询,但它返回最后一部分,即25.0。我希望它返回第一部分,即53。我如何做到这一点 select regexp_substr('53|100382951130|25.0', '[^|]+$', 1,1) as part1 from dual 假设始终至少出现一次“|”,则可以在不使用regexp的情况下使用以下选项: with test(string) as ( select '53|1003

我被困在这里了。我正在使用oracle,我希望在第一次出现“|”之前获取字符串的第一部分。这是我的查询,但它返回最后一部分,即25.0。我希望它返回第一部分,即53。我如何做到这一点

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

假设始终至少出现一次
“|”
,则可以在不使用regexp的情况下使用以下选项:

with test(string) as ( select '53|100382951130|25.0' from dual)    
select substr(string, 1, instr(string, '|')-1)
from test
您甚至可以使用regexp实现同样的功能,或者甚至可以处理没有
“|”的情况

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
您甚至可以在不使用regexp的情况下处理不出现
“|”
的情况:

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

假设始终至少出现一次
“|”
,则可以在不使用regexp的情况下使用以下选项:

with test(string) as ( select '53|100382951130|25.0' from dual)    
select substr(string, 1, instr(string, '|')-1)
from test
您甚至可以使用regexp实现同样的功能,或者甚至可以处理没有
“|”的情况

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
您甚至可以在不使用regexp的情况下处理不出现
“|”
的情况:

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

非常感谢。这对我来说太多了。这使我很好