我有一个字符串,如" 1490/2334/5166400411000434
"我需要在第二次斜线后得出值。我尝试了以下逻辑
select REGEXP_SUBSTR('1490/2334/5166400411000434','[^/]+',1,3) from dual;
工作正常。但是,当我在第一次和第二次斜线之间没有价值时,它正在返回空白。 例如,我的字符串是" 1490 // 5166400411000434"我正在尝试
select REGEXP_SUBSTR('1490//5166400411000434','[^/]+',1,3) from dual;
它返回空白。
请告诉我我错过了什么。
答案 0 :(得分:1)
如果我理解得很好,你可能需要
regexp_substr(t, '(([^/]*/){2})([^/]*)', 1, 1, 'i', 3)
这将处理前两个部分,如'xxx/'
,然后检查一系列非/
个字符;参数3
用于获取第3个匹配的子表达式,这就是您想要的。
例如:
with test(t) as (
select '1490/2334/5166400411000434' from dual union all
select '1490//5166400411000434' from dual union all
select '1490//5166400411000434/ramesh/3344' from dual
)
select t, regexp_substr(t, '(([^/]*/){2})([^/]*)', 1, 1, 'i', 3) as substr
from test
给出:
T SUBSTR
---------------------------------- ----------------------------------
1490/2334/5166400411000434 5166400411000434
1490//5166400411000434 5166400411000434
1490//5166400411000434/ramesh/3344 5166400411000434
答案 1 :(得分:0)
你可以REVERSE()
你的字符串并在第一个斜杠之前取值。然后再次反转以获得所需的输出。
select reverse(regexp_substr(reverse('1490//5166400411000434'), '[^/]+', 1, 1)) from dual;
也可以使用基本的子串和instr函数来完成:
select reverse(SUBSTR(reverse('1490//5166400411000434'), 0, INSTR(reverse('1490//5166400411000434'), '/')-1)) from dual;
答案 2 :(得分:0)
使用REGEXP_SUBSTR中的其他选项来匹配pattren
threshold_cur: ${thr_cur}
基本上它是找到两个/包括从1开始的数字,包括1个外观并忽略空格('x')然后在()中输出第二个表达式的第二个表达式 ... pattern,1,1,'x',subexp2)