Oracle中棘手的子串使用

时间:2017-03-29 16:59:55

标签: string oracle case text-extraction

我正在寻找一种方法来检索字符串中最后一个" /"字符后的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语句中,但这不应该改变解决方案。

提前致谢

1 个答案:

答案 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>