如何在Oracle中使用替换功能删除字符串?

时间:2019-04-12 16:38:24

标签: oracle replace

在我的表中,我有PAT5DSA-(ALRP),LAR6DAOP-(RAH)等数据。但是我想删除-(xxxx)或-(xxx)之类的字符串,它们可以是括号内的任何字母。尝试使用以下方法:

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

但这没有用。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

我们可以使用REGEXP_REPLACE进行正则表达式替换:

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

PAT5DSA

答案 1 :(得分:1)

普通的replace()不理解模式。您可以使用a regular expression 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      

这将删除在原始字符串末尾的一对括号内的所有字符,该括号前带有一个破折号。如果要删除的括号可能在字符串中的任意位置,则删除$

答案 2 :(得分:0)

使用INSTRSUBSTR

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;

好运。