我在列中有一个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;
但没有运气。
如何提取它。
提前致谢
答案 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>