Oracle数据库 - 来自字段的subtr文本,没有恒定端点



如果我不知道它的结尾,在字段中获得文本片段是真的吗?我的文字带有片段,例如"类型工作:blablabla",需要得到它。片段的起点 - '类型工作:'

但长度不是恒定的,在此片段之后可能是其他文本不同的 - 不变的定界符;或者,或其他可以为我的片段提供终点的东西。

示例:

类型工作:Blablabla

开始:01-01-2019

需要获得

类型工作:Blablabla

类型工作:Blablabla

blablabla

sendornot:是

需要获得

类型工作:Blablabla

blablabla

我不是100%确定,但是以下查询可能是您需要的:

-- Sample data:
WITH dat(text) AS (SELECT 'type work: blablabla
start: 01-01-2019' FROM dual UNION ALL 
SELECT 'type work: blablabla
blablablabla
sendornot:yes' FROM dual)
-- Query:
SELECT REGEXP_REPLACE(
          -- Make sure text starts with 'type work:':
          CASE WHEN INSTR(text, 'type work:') > 0 THEN SUBSTR(text, INSTR(text, 'type work:')) END
     , '(type work:[^:]*)'||CHR(10)||'[^:'||CHR(10)||']*:.*$','1'
     ,1,1,'n') FROM dat

此查询第一个搜索:在type work之后,并在此之前将所有行交易为键,然后从type work获取文本直到该键。

如果您有一个键列表,则可能需要检查它们而不是[^:'||CHR(10)||']

SELECT REGEXP_REPLACE(
          CASE WHEN INSTR(text, 'type work:') > 0 THEN SUBSTR(text, INSTR(text, 'type work:')) END
     , '(type work:[^:]*)'||CHR(10)||'(start|sendornot):.*$','1'
     ,1,1,'n') FROM dat

最新更新