如何在Oracle中删除除'E'以外的所有字符

时间:2019-03-21 12:35:07

标签: sql regex oracle

我有像'AA_0331L_02317_R5_P'这样的strig,我想用_字符分割后从第二部分中除去除'E'以外的所有字符,因此这里的0331N应该变成0331,如果它像{{1} },那么它应该变成0331E。也就是说,如果我有像AA_0331N_02317_R5_P这样的字符串,那么我想成为0331E,如果我有AA_0331_02317_R5_P,那么它应该是{{1 }}。我喜欢如下所示,没有任何运气

AA_0331E_02317_R5_P

2 个答案:

答案 0 :(得分:2)

您可以尝试执行以下操作-请记住,<video width="320" height="240" autoplay loop muted playsinline> <source src="movie.mp4" type="video/mp4" /> </video> 将在没有实际替换的情况下返回原始字符串。在这里,我使用的是反向引用(如果Oracle正则表达式已经提前,我可以省略第二个捕获组和反向引用):

REGEXP_REPLACE()

答案 1 :(得分:0)

with s as (
select 'AA_0331L_02317_R5_P' str from dual union all
select 'AA_0331E_02317_R5_P' str from dual)
select str,
regexp_replace(regexp_substr(str, '[^_]+_[^_]+'), '[^E]$') || regexp_replace(str, '[^_]+_[^_]+', '', 1, 1) new_str
from s;

STR                            NEW_STR
------------------------------ ------------------------------
AA_0331L_02317_R5_P            AA_0331_02317_R5_P
AA_0331E_02317_R5_P            AA_0331E_02317_R5_P