【问题标题】:Extract a part of a string using regexp_substr使用 regexp_substr 提取字符串的一部分
【发布时间】:2016-06-17 09:10:12
【问题描述】:

我在 Oracle sql 中运行以下命令。我能够获得我想要的结果,但想了解如何应用替代方案。我想提取总是从第 18 个字符开始的名称,但名称和后面的字符总是不同。

示例: "分配给组 5678 中的用户 John Smith"

这可以在表 history.description 中找到。

如果我使用 SUBSTR (HISTORY.DESCRIPTION, 18, INSTR (HISTORY.DESCRIPTION,' in')-18 AS NAME

我得到了我想要的“John Smith”结果

我正在尝试 SUBSTR (HISTORY.DESCRIPTION,18, REGEXP_SUBSTR (HISTORY.DESCRIPTION, '(\S*)(\w)', 'in')

Ora 01722 无效号码错误是我得到的。

我不明白如何应用此功能

【问题讨论】:

标签: string oracle function oracle11g regexp-substr


【解决方案1】:

你能假设获取第一个“user”和最后一个“in”之间的所有文本是安全的吗?该文本会保持不变吗?

SQL> with history(description) as (
      select 'Assigned to user John Smith in group 5678' from dual
    )
    select regexp_substr(description, 'user\s(.*)\sin', 1, 1, 'i', 1) name
    from history;

NAME
----------
John Smith

SQL>

或者要真正收紧正则表达式以匹配更多字符串,您可以将其更改为从第 18 个字符开始并匹配所有字符,但不包括“组内”文本开头的空格:

'^.{17}(.+) in group \d+$'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多