是否可以将REPLACE与LIKE组合以替换oracle数据库列中的多个值

时间:2015-05-08 14:16:15

标签: regex oracle replace oracle11g

这与问题here类似,但我没有替换单个值,而是想用匹配模式替换多个值。

--create table
create table my_table (column1 varchar2(10));

--load table
insert into my_table values ('Test1');
insert into my_table values ('Test2');
insert into my_table values ('Test3');
insert into my_table values ('Test4');
insert into my_table values ('Test5');
insert into my_table values ('Lesson');



--this query replaces 'Test1' with blank
select replace(column1, 'Test1', ' ') from my_table;

--now i want to replace all matching values with blank but i get an error
select replace(column1, like '%Test%', ' ') from my_table; --this throws below error.


--ORA-00936: missing expression
--00936. 00000 -  "missing expression"
--*Cause:    
--*Action:
--Error at Line: 19 Column: 25

运行Oracle Database 11g企业版11.2.0.1.0版

2 个答案:

答案 0 :(得分:3)

我会使用regexp_replace。

select regexp_replace(column1,'Test[[:digit:]]', ' ') from my_table;

regexp_replace

答案 1 :(得分:1)

在原始帖子中,您通过%Test%指示您想要用空格替换整个字符串,如果它在其中的任何位置有字符串“Test”:

with my_table(col1) as
( select 'Test1' from dual
  union
  select 'Test2' from dual
  union
  select 'thisisaTestofpatternmatching4' from dual
  union
  select 'thisisa Test ofpatternmatching5' from dual  
  union
  select 'Test at the start' from dual    
  union
  select 'Testat the start no following space' from dual   
  union
  select 'Ending with Test' from dual    
  union
  select 'Ending nospacebeforewithTest' from dual     
  union
  select 'Testy' from dual        
  union
  select 'Lesson' from dual    
)
select regexp_replace(col1, '^.*Test.*$', ' ') from my_table; 

我怀疑你真的只想替换Test这个词吗?它可以在一行中多次出现吗?

select regexp_replace(col1, 'Test', ' ') from my_table;

单词测试后跟数字?

select regexp_replace(col1, 'Test\d', ' ') from my_table;

提示:确保您的测试用例设置为包含测试数据的各种组合,即使它们可能是意外的。在测试正则表达式时,有时可能会出现意外结果,因此请确保测试所有可能的条件。