我有一个要求,其中我有一个像STEP_D1_DEVTS_MN_PQ_LS
这样的列值
我想要第一个下划线之后和第三个下划线之前的值,然后像下面这样用hypen替换下划线
D1-DEVTS
。
有人可以帮我吗?
我尝试过SUBSTR
和INSTR
并没有帮助我。
答案 0 :(得分:1)
一种选择是将并发regexp_substr
表达式与replace
一起使用
with t(str) as
(
select 'STEP_D1_DEVTS_MN_PQ_LS' from dual
)
select replace(regexp_substr(str,'[^_]+[_]',1,2)||regexp_substr(str,'[^_]+',1,3),'_','-')
as "Result String"
from t;
Result String
-------------
D1-DEVTS
答案 1 :(得分:1)
另一种方法是使用SUBSTR
+ INSTR
(当然还有REPLACE
):
SQL> with test (col) as
2 (select 'STEP_D1_DEVTS_MN_PQ_LS' from dual)
3 select
4 replace(substr(col,
5 instr(col, '_', 1, 1) + 1, --> start after the 1st underscore
6 instr(col, '_', 1, 3) - instr(col, '_', 1, 1) - 1 --> take everything that's between 1st and 3rd underscore
7 ), '_', '-') result --> replace _ with -
8 from test;
RESULT
--------------------
D1-DEVTS
SQL>