在我的表中,我有PAT5DSA-(ALRP),LAR6DAOP-(RAH)等数据。但是我想删除-(xxxx)或-(xxx)之类的字符串,它们可以是括号内的任何字母。尝试使用以下方法:
select replace(:code,'-(Aa-Zz)',null) from employee;
但这没有用。有人可以帮忙吗?
答案 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)
使用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;
好运。