使用regexp_substr提取字符串的一部分

时间:2016-03-03 20:30:54

标签: string oracle function oracle11g regexp-substr

我在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无效号码错误是我得到的。

我不了解如何应用此功能

1 个答案:

答案 0 :(得分:0)

您能否认为在第一个“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个字符开始并匹配所有字符,但不包括“in group”文本开头的空格:< / p>

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