Как использовать функцию замены в Oracle для удаления строки? - PullRequest
0 голосов
/ 12 апреля 2019

В моей таблице есть такие данные, как PAT5DSA- (ALRP), LAR6DAOP- (RAH) и т. Д. Но я хочу удалить такие строки, как - (xxxx) или - (xxx), которые могут быть любыми алфавитами внутри фигурных скобок.Попробовал с помощью ниже:

select replace(:code,'-(Aa-Zz)',null) from employee;

Но это не сработало .. Может кто-нибудь, пожалуйста, помогите?

Ответы [ 3 ]

2 голосов
/ 12 апреля 2019

Мы можем сделать замену регулярного выражения, используя REGEXP_REPLACE:

SELECT REGEXP_REPLACE('PAT5DSA-(ALRP)', '-\(.*?\)', '')
FROM dual;

PAT5DSA
1 голос
/ 12 апреля 2019

равнина replace() не понимает закономерности. Вы можете использовать , регулярное выражение заменяет , например ::

.
-- CTE for sample data
with cte (code) as (
  select 'PAT5DSA-(ALRP)' from dual
  union all
  select 'LAR6DAOP-(RAH)' from dual
)
select code, regexp_replace(code, '-\(.*?\)$') as result
from cte;

CODE           RESULT        
-------------- --------------
PAT5DSA-(ALRP) PAT5DSA       
LAR6DAOP-(RAH) LAR6DAOP      

Это удалит все, что находится внутри пары скобок, которой предшествует тире, в конце исходной строки. Если удаляемые скобки могут быть где-то в строке, тогда удалите $.

0 голосов
/ 12 апреля 2019

Используйте INSTR и SUBSTR:

WITH cteVals AS (SELECT 'PAT5DSA-(ALRP)' AS COL_VAL FROM DUAL UNION ALL
                 SELECT 'LAR6DAOP-(RAH)' AS COL_VAL FROM DUAL)
SELECT SUBSTR(COL_VAL, 1, INSTR(COL_VAL, '-')-1)
  FROM cteVals;

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...