если я вообще хочу использовать подстроку после _, что лучше использовать?
Не совсем понятно, хотите ли вы удалить только точную строку 'PREPROCESSINGLIST_'
, и если да, то должно ли это совпадать только в начале строки или где-либо еще; или вы хотите удалить что-либо до первого подчеркивания или что-нибудь до любого подчеркивания.
В зависимости от ваших фактических данных и результата, который вы хотите получить, вы можете использовать regexp_replace()
, как показывал @FrankScmitt (с или без привязки), или просто replace()
, или комбинацию instr()
и substr()
.
С некоторыми подготовленными данными с различными шаблонами, предоставленными в CTE:
with t (str) as (
select 'PREPROCESSINGLIST_AOD' from dual
union all select 'PREPROCESSINGLIST_BOD' from dual
union all select 'PREPROCESSINGLIST_COD' from dual
union all select 'PREPROCESSINGLIST_DOD' from dual
union all select 'XYZ_PREPROCESSINGLIST_EOD' from dual
union all select 'XYZ_FOD' from dual
union all select 'ABC_XYZ_GOD' from dual
union all select 'HOD' from dual
)
select str,
regexp_replace(str, '^PREPROCESSINGLIST_', null) as anchor_regex,
regexp_replace(str, 'PREPROCESSINGLIST_', null) as free_regex,
replace(str, 'PREPROCESSINGLIST_', null) as free_replace,
case when instr(str, '_') > 0 then substr(str, instr(str, '_') + 1) else str end
as first_underscore,
case when instr(str, '_') > 0 then substr(str, instr(str, '_', -1) + 1) else str end
as last_underscore
from t;
STR ANCHOR_REGEX FREE_REGEX FREE_REPLAC FIRST_UNDERSCORE LAST_UNDERS
------------------------- ------------------------- ----------- ----------- --------------------- -----------
PREPROCESSINGLIST_AOD AOD AOD AOD AOD AOD
PREPROCESSINGLIST_BOD BOD BOD BOD BOD BOD
PREPROCESSINGLIST_COD COD COD COD COD COD
PREPROCESSINGLIST_DOD DOD DOD DOD DOD DOD
XYZ_PREPROCESSINGLIST_EOD XYZ_PREPROCESSINGLIST_EOD XYZ_EOD XYZ_EOD PREPROCESSINGLIST_EOD EOD
XYZ_FOD XYZ_FOD XYZ_FOD XYZ_FOD FOD FOD
ABC_XYZ_GOD ABC_XYZ_GOD ABC_XYZ_GOD ABC_XYZ_GOD XYZ_GOD GOD
HOD HOD HOD HOD HOD HOD
Если вы можете получить нужный результат более чем одним способом, то, как правило, более эффективно избегать регулярных выражений, но иногда они являются единственным (вменяемым) выбором. Как всегда, лучше самим проверить варианты на основе фактических данных, чтобы увидеть, что является наиболее эффективным или хотя бы достаточно эффективным.