Как удалить все символы, кроме «E» в оракуле - PullRequest
0 голосов
/ 21 марта 2019

У меня есть стриг как 'AA_0331L_02317_R5_P', и я хочу удалить все символы, кроме 'E', из второй части после разделения на символ _, так что здесь 0331N должно стать 0331, а если оно будет похоже на 0331E, то онодолжен стать 0331E .ie просто, если у меня есть строка типа AA_0331N_02317_R5_P, тогда я хочу быть AA_0331_02317_R5_P, а если у меня есть AA_0331E_02317_R5_P, то это должно быть AA_0331E_02317_R5_P.Мне понравилось, как показано ниже, без всякой удачи

   SELECT REGEXP_REPLACE(REGEXP_SUBSTR( 'AA_0331L_02317_R5_P' , '[^_]+', 1, 2 ), '[^0-9]', '')  
FROM dual

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Вы можете попробовать что-то вроде следующего - помните, что REGEXP_REPLACE() вернет исходную строку, если на самом деле ничего не будет заменено.Здесь я использую обратные ссылки (если бы у регулярных выражений Oracle был прогноз, я мог бы опустить вторую группу захвата и обратную ссылку):

WITH mytable AS (
    SELECT 'AA_0331L_02317_R5_P' AS myvalue
      FROM dual
     UNION ALL
    SELECT 'AA_0331N_02317_R5_P'
      FROM dual
     UNION ALL
    SELECT 'AA_0331E_02317_R5_P'
      FROM dual
)
SELECT myvalue
     , REGEXP_REPLACE(myvalue, '^([^_]+_[^_]+)[^E](_)', '\1\2') mynewvalue
  FROM mytable;

MYVALUE                    MYNEWVALUE
-------------------------  -------------------------
AA_0331L_02317_R5_P        AA_0331_02317_R5_P
AA_0331N_02317_R5_P        AA_0331_02317_R5_P
AA_0331E_02317_R5_P        AA_0331E_02317_R5_P
0 голосов
/ 21 марта 2019
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...