捕获中间的字符串

Capture string in between

如何捕获一系列字符串之间的数据?

我在一列中有以下数据: 基本上,删除“INCIDENT TYPE:”之前和“External ALARM ID:”之后的所有内容 “事件类型:”没有具体的字符数。

HOSTNAME: sample.com INCIDENT TYPE: SampleSiteUpDown SOURCED FROM External External ALARM ID: 57536

而我只想显示事件类型值

Incident Type
SampleSiteUpDown SOURCED FROM External

假设您的消息具有固定格式:

HOSTNAME: ... INCIDENT TYPE: ... ALARM ID:

我们可以在这里使用基本字符串函数:

SELECT SUBSTR(msg,
              INSTR(msg, 'INCIDENT TYPE:') + 15,
              INSTR(msg, 'ALARM ID:') -
                  INSTR(msg, 'INCIDENT TYPE:') - 16) AS incident
FROM yourTable;

这是一个有效的demo

一个选择是使用好的、旧的 substr + instr 组合:

SQL> with test (col) as
  2    (select 'HOSTNAME: sample.com INCIDENT TYPE: SampleSiteUpDown SOURCED FROM External External ALARM ID: 57536'
  3     from dual
  4    )
  5  select substr(col, instr(col, 'INCIDENT TYPE:') + 15,
  6                     instr(col, 'External ALARM ID') - instr(col, 'INCIDENT TYPE:') - 16
  7               ) result
  8  from test;

RESULT
---------------------------------------
SampleSiteUpDown SOURCED FROM External

SQL>

查看 REGEXP_ SUBSTR 查询,使用类似于

SELECT REGEXP_SUBSTR(msg, 'INCIDENT TYPE: (.* SOURCED FROM External)', 1, 1,'', 1) FROM ...

Demo

我认为它比其他解决方案更简洁、更灵活。