在工作中遇到这样一个问题:
从大段文本中利用正则表达式截取:如果有第一组表达式则从第一组表达式开始截取,如果没有,从第二组表达式开始
例如:
SELECT * FROM
(SELECT '该患者进行了EGFR中的20#外显子检测' diag_desc FROM dual
UNION ALL
SELECT '患者进行了20#检测' FROM dual)

对于第一条数据:需要从此文本中截取EGFR开始到20#结束
对于第二条数据:需要从此文本中截取20#
两个正则表达式或者的关系可以满足,
eg:
SELECT
diag_desc,
regexp_substr(diag_desc,'EGFR.*?20#|20#') reg_sub
FROM
(SELECT '该患者进行了EGFR 20#外显子检测' diag_desc FROM dual
UNION ALL
SELECT '患者进行了20#检测' FROM dual)

可以满足,但用了或者关系,两个正则拼接,在大数据量的情况下,效率较低。后咨询同事得知还有另一种写法:
SELECT
diag_desc,
regexp_substr(diag_desc,'(EGFR.*)?20#') reg_s

最低0.47元/天 解锁文章
1081

被折叠的 条评论
为什么被折叠?



