Не пренебрегвайте да тествате с целевия модел на всички възможни позиции в низа, включително изобщо не там. Винаги очаквайте неочакваното! Този метод използва 3 групи за улавяне. Първият е началото на реда или всички знаци, последвани от интервал, които се появяват преди втората група. Втората група е една или повече словни знаци (a-z, A-Z, 0-9, включително знака _ (долна черта), последвани от 'as'. Третата група за улавяне е останалата част от линията.
Това се заменя от 1-ва и 3-та група за улавяне, ефективно премахвайки думата преди и включвайки „като“. Започва от позиция 1, прави го за всички срещания, като пренебрегва регистъра на буквите.
SQL> with tbl(id, str) as (
select 1, 'run_id, src_key, cd_key, ml_orig as cde_value, date_key, desc' from dual union all
select 2, 'ml_orig as cde_value, run_id, src_key, cd_key, date_key, desc' from dual union all
select 3, 'run_id, src_key, cd_key, date_key, desc, ml_orig as cde_value' from dual union all
select 4, 'run_id, src_key, cd_key, date_key, desc, ml_orig as cde_value' from dual union all
select 5, 'ml_oria as run_id, ml_orib as src_key, ml_oric as desc, ml_orid as cde_value' from dual union all
select 6, NULL from dual union all
select 7, 'run_id,ml_orig as src_key, cd_key, date_key, desc, ml_orig as cde_value' from dual
)
select id, regexp_replace(str, '(^|.*?, *)(\w+ +as +)(.*)', '\1\3', 1, 0, 'i') fixed
from tbl;
ID FIXED
---------- --------------------------------------------------
1 run_id, src_key, cd_key, cde_value, date_key, desc
2 cde_value, run_id, src_key, cd_key, date_key, desc
3 run_id, src_key, cd_key, date_key, desc, cde_value
4 run_id, src_key, cd_key, date_key, desc, cde_value
5 run_id, src_key, desc, cde_value
6
7 run_id,src_key, cd_key, date_key, desc, cde_value
7 rows selected.
SQL>
person
Gary_W
schedule
05.12.2018