REGEXP_SUBSTR提取所需的字符串

时间:2018-01-05 10:47:50

标签: sql oracle oracle11g

我在列中有一个HISTORY-VDF-DE-EOF-WORK VDF-DE-EOF-WORK FFOR-1!20170904T105949.630 GMT的字符串格式。

需要从中提取FFOR-*。 其中FFOR-*是升序,20170904T105949.630是日期格式和时间戳,它对列中的每个条目都会更改。

尝试了

SELECT REGEXP_SUBSTR('source column', '\d[FFOR-]*') as order FROM table;

但没有运气。

如何提取它。

提前致谢

1 个答案:

答案 0 :(得分:0)

它必须是正则表达式解决方案吗?因为,带有INSTR的普通 SUBSTR也能完成这项工作:

[在看到需要输出后编辑]

SQL> with test as
  2    (select 'HISTORY-VDF-DE-EOF-WORK VDF-DE-EOF-WORK FFOR-1!20170904T105949.630 GMT' col
  3     from dual
  4    )
  5  select
  6    substr(col,
  7           instr(col, 'FFOR-'),
  8           instr(col, '!', -1) - instr(col, 'FFOR-')
  9          ) result
 10  from test;

RESULT
------
FFOR-1

SQL>

[编辑#2,使用REGEXP]

请注意,虽然它看起来“更智能”,但对于大数据量,可能比SUBSTR选项慢。

SQL> with test as
  2    (select 'HISTORY-VDF-DE-EOF-WORK VDF-DE-EOF-WORK FFOR-1!20170904T105949.630 GMT' col
  3     from dual
  4    )
  5  select regexp_substr(col, 'FFOR-\d+') result
  6  from test;

RESULT
------
FFOR-1

SQL>