Как извлечь данные ПОСЛЕ 1-го дефиса и до 3-го дефиса в Oracle SQL - PullRequest
0 голосов
/ 14 мая 2019

У меня есть требование, где у меня есть значение столбца, например STEP_D1_DEVTS_MN_PQ_LS

Я хочу получить значение после 1-го подчеркивания и до 3-го подчеркивания, а затем получить замену подчеркивания на знак переноса, как показано ниже

D1-DEVTS.

Может кто-нибудь помочь мне здесь?

Я пробовал SUBSTR и INSTR, которые мне не помогли.

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Другой вариант - использовать 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>
1 голос
/ 14 мая 2019

Одним из вариантов будет использование одновременных 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...