我被困在这里。我正在使用oracle,我想在第一次出现' |'之前获取字符串的第一部分。这是我的查询,但它返回最后一部分,即25.0。我希望它返回第一部分,即53.我如何实现这一目标?
select regexp_substr('53|100382951130|25.0', '[^|]+$', 1,1) as part1 from dual
答案 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