使用Oracle sql,我想提取某些单词之前的文本。我需要排除在单词“ exceed”或“ max”之后的文本。
示例:“在4-6个小时内花1-2个标签。每天不要超过5个标签”
所需输出:“花1-2个制表符4-6个小时。不要”
答案 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