我正在寻找一种方法来检索字符串中最后一个" /"字符后的2个数字。如果在我想要的2个数字之后有什么东西,我就不在乎。
我想出的代码是:
CASE when INSTRUMENT like '%/%' then SUBSTR(INSTRUMENT,INSTR(INSTRUMENT,'/',-3,1)+1,2) else '0' end
这似乎工作正常。 问题是当它没有找到任何" /"字符时,它不会像我想的那样用0填充它们。
为您举例说明我想要执行的内容:
XXX/YYY/ZZZ/92 ---> Returns 92
XXX/YYY/ZZZ/42 (test) ---> Returns 42
XXX YYY ZZZ 10 ---> Returns 0
所有这一切都必须"插入"在select case语句中,但这不应该改变解决方案。
提前致谢
答案 0 :(得分:2)
也许regexp_substr会对你有用。如果它返回NULL,意味着找不到斜线的模式,后跟2位数字,并且找不到字符串末尾的0或更多字符,则替换为' 0' 0使用NVL()。
SQL> with tbl(str) as (
select 'XXX/YYY/ZZZ/92' from dual union
select 'XXX/YYY/ZZZ/42 (test)' from dual union
select 'XXX YYY ZZZ 10' from dual
)
select nvl(regexp_substr(str, '/(\d{2}).*$', 1, 1, NULL, 1), '0') digits
from tbl;
DIGITS
---------------------
0
42
92
SQL>