这与问题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版
答案 0 :(得分:3)
我会使用regexp_replace。
select regexp_replace(column1,'Test[[:digit:]]', ' ') from my_table;
答案 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;
提示:确保您的测试用例设置为包含测试数据的各种组合,即使它们可能是意外的。在测试正则表达式时,有时可能会出现意外结果,因此请确保测试所有可能的条件。