Oracle SQL:在两个句子之间获取文本

时间:2019-04-19 10:09:53

标签: oracle substring

我正在尝试从存储在名为“ myColumn”的表列中的字符串中提取一组字符串,其中的一行看起来像这样-

Type:MOBILE
Service:GSM
Pd to LOOK:
NOKIA/HMD;
APPLE;
MI;

Pd to SEE (swap):
SAMSUNG;
VIVO;

Pd to SEE (extra):
MOKA;

Contact me: 123456

我尝试获取一列的代码是-

SELECT regexp_substr(myColumn, '\"Products to be CEASED:"([^"Products to be PROVIDED (swap):"]+)\}', 1,1,NULL,1) AS output FROM mytable

我需要一个查询,该查询将返回句子之间的文本-

“ Pd到LOOK:”和“ Pd到SEE(交换):”

“将Pd转换为SEE(交换):”和“将Pd转换为SEE(额外):”

“将Pd转换为SEE(额外):”和“与我联系:123456”

例如-

Pd to LOOK:            Pd to SEE (swap):  Pd to SEE (extra):
NOKIA/HMD; APPLE; MI;  SAMSUNG;VIVO;      MOKA;

1 个答案:

答案 0 :(得分:2)

一个直接的解决方案是将substr函数与instr函数结合使用。或DBMS_LOB.instr和substr(如果该列的数据类型是LOB)。

documentation for dbms_lob.instr

例如:

select 
     substr(
       mycolumn,
       instr(mycolumn,'Pd to LOOK:'), --starting position
       instr(mycolumn,'Pd to SEE (swap):') - instr(mycolumn,'Pd to LOOK:'), --amount to get
       ) as "Pd to LOOK:"
     --, other expressions/columns
from 
     my_table;