Используя Oracle sql, я хочу извлечь текст перед определенными словами.Мне нужно исключить текст, начинающийся со слова «превышать» или «макс» и следующий за ним.
Пример: «Возьмите 1-2 вкладки 4–6 часов. Не превышайте 5 вкладок в день»
Требуемый результат: «Возьмите 1-2 вкладки 4-6 часов. Не»
Я достиг желаемого результата с помощью вложенного regexp_substr(), например так:
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().
trim()
Ссылка: https://www.techonthenet.com/oracle/functions/regexp_substr.php
Я думаю regexp_instr() с substr(), а не regexp_substr() напрямую:
regexp_instr()
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