【问题标题】:Oracle Substr SQLOracle Substr SQL
【发布时间】:2014-12-02 02:02:38
【问题描述】:

我得到了数据库列表。

**NAME**
OEE_LINE_ABC
OEE_LINE_ABCD
OEE_LINE_QWERTYUIOP
OEE_LINE_zxcvbd

我需要获取OEE_LINE_ 之后的Name。但它没有规范多少个字符。我从谷歌得到的是修复多少个字符。

例子:

SUBSTR(Name,10,3)
Result: 'ABC'

如果我使用上面的substr,它可以毫无问题地抓取第一个值(OEE_LINE_ABC),当涉及到第二个值时,就会出现问题,因为上面的substr只能检索3个字符。

预期结果:

能够获取OEE_LINE_之后的值的SQL语句

结果(返回名称不带OEE_LINE_):

Name = ABC
Name = ABCD
Name = QWERTYUIOP
Name = zxcvbd

有没有相关的帖子分享和回答?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    我建议寻找最后一个 '_' 并从那里获取字符串:

    select substr(name, length(name) - instr(reverse(name), '_') + 2)
    

    【讨论】:

    • 嗨,Gordon,这是有效的,但有一个问题,它返回一个额外的_。示例 - 它应该只返回 ABC 而不是 _ABC
    • 我已经得到了答案 Gordon,我将 +1 更改为 +2。非常感谢!
    【解决方案2】:
    SUBSTR(Name,10,length(Name)-9)
    

    【讨论】:

    • 嗨,-9 是什么意思?
    • 您好,您应该在 SUBSTR 函数的第三个参数中插入字符串的长度减去 9,即“OEE_LINE_”的长度,而不是 3
    • 我认为 3 是我想要抓取的值,而 10 是我想要开始抓取 Name 的位置,对应于 link
    【解决方案3】:

    如果您需要字符串的其余部分,只需指定起始位置:

    SELECT SUBSTR(name, 10)

    SQL Fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 2021-01-28
      • 2020-10-07
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多