【发布时间】:2021-10-04 00:46:48
【问题描述】:
我有一个带有 regex_replace 的 select 语句。
SELECT REGEXP_REPLACE((REGEXP_REPLACE(nvl(d.text_i, d.text),'[^=|]+(\||$)')),'^'||24466||'=|\|'
||24466||'=', '||'||24466||'='||'C1')
FROM table_infor d
where d.tab_id = 13095;
text_i 和 text 列的 I 值如下
text text_i
26736=A||||24470=B1||||24467=||||24466=V1 (null)
26736,24470,24467,24466 (null)
26736=A||||24470=||||24467=||||24466=V1 (null)
26736=||||24470=B1||||24467=B||||24466=V1 (null)
(null) A
123 (null)
所以我想打印这个:
26736=||||||24470=||||||24467=|||||||24466=C1
2673,24470,24467,24466
26736=||||24470=||||24467=||||24466=C1
26736=||||24470=||||24467=||||24466=C1
A
123
但我目前得到的是
26736=||||||24470=||||||24467=|||||||24466=C1
(null)
26736=||||24470=||||24467=||||24466=C1
26736=||||24470=||||24467=||||24466=C1
所以我的 regexp_replace 逻辑适用于所有具有 =||||| 的值有效,但对于其他值,它没有选择它们。我希望按原样选择其他值。
【问题讨论】:
-
看起来罪魁祸首是第一个正则表达式。尝试将
=[^=|]+(\||$)替换为=,即REGEXP_REPLACE(nvl(d.text_i, d.text),'=[^=|]+(\||$)', '=')
标签: regex select plsql oracle12c regexp-replace