捕获中间的字符串
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 ...
我认为它比其他解决方案更简洁、更灵活。
如何捕获一系列字符串之间的数据?
我在一列中有以下数据: 基本上,删除“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 ...
我认为它比其他解决方案更简洁、更灵活。