Oracle SQL:使用REGEXP_SUBSTR提取特定单词之前的文本

时间:2018-10-16 15:23:16

标签: sql regex oracle

使用Oracle sql,我想提取某些单词之前的文本。我需要排除在单词“ exceed”或“ max”之后的文本。

示例:“在4-6个小时内花1-2个标签。每天不要超过5个标签”

所需输出:“花1-2个制表符4-6个小时。不要”

2 个答案:

答案 0 :(得分:0)

我正在考虑regexp_instr()substr()一起使用,而不是直接与regexp_substr()

select x.*,
       substr(str, 1, regexp_instr(str || 'max', 'exceed|max') - 2)
from (select 'Take 1-2 tabs 4-6 hours. Do not exceed 5 tabs per day' as str from dual) x

答案 1 :(得分:0)

我通过使用嵌套regexp_substr()达到了期望的输出,就像这样:

select trim(regexp_substr(
    regexp_substr('Take 1-2 tabs 4-6 hours. Do not exceed 5 tabs per day','.*(exceed|max)'),
    '.*[^(exceed|max)]'
  )) desired_output
from dual;

但是,如果您需要在“超出”或“最大值”之前使用空格,则只需删除trim()

参考:https://www.techonthenet.com/oracle/functions/regexp_substr.php