【问题标题】:Tricky substring usage in OracleOracle 中棘手的子字符串用法
【发布时间】:2017-03-29 16:59:54
【问题描述】:

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

提前致谢

【问题讨论】:

  • 我不明白这一点。如果我运行您的查询,我得到的结果与您发布的所需结果完全相同;有什么问题?

标签: string oracle case text-extraction


【解决方案1】:

也许 regexp_substr 对你有用。如果返回 NULL,表示未找到后跟 2 位数字和 0 个或更多字符的斜线模式,使用 NVL() 替换为“0”。

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> 

【讨论】:

    猜你喜欢
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    相关资源
    最近更新 更多