我有一个包含 10 多列的表。有些数据包含箭头、®、¼、â 等垃圾字符...我想使用 REGEXP_REPLACE 在 UPDATE 语句中使用 FOR 循环从所有列值中删除所有垃圾字符。
数据示例:
I AM ‘USERâ€
?®Name
• We
我必须使用 FOR 循环编写 UPDATE 查询来检查所有列:
update table_name
set column_name = regexp_replace(column_name,'[^[a-z,A-Z,0-9,[:space:]]]*','')
where regexp_like(column_name, '[^[:print:][:space:]]' );
为此,您不需要 pl/sql for 循环,只需更新就可以了。
UPDATE
table_name
SET
column_name = REGEXP_REPLACE(str,'[^a-zA-Z0-9[:space:]]','')
WHERE regexp_like(column_name, '[^a-zA-Z0-9[:space:]]' );
对于多列,只需更改更新语句即可。
create table weird_chars (
id number generated by default on null as identity
constraint weird_chars_id_pk primary key,
column1 varchar2(100 char),
column2 varchar2(100 char),
column3 varchar2(100 char)
)
;
-- load data
insert into weird_chars (
column1,
column2,
column3
) values (
'I AM ‘USERâ€',
'?®Name',
'Just normal text'
);
-- load data
insert into weird_chars (
column1,
column2,
column3
) values (
'Just normal text',
'Just normal text',
'Just normal text'
);
UPDATE
weird_chars
SET
column1 = REGEXP_REPLACE(column1,'[^a-zA-Z0-9[:space:]]',''),
column2 = REGEXP_REPLACE(column2,'[^a-zA-Z0-9[:space:]]',''),
column3 = REGEXP_REPLACE(column3,'[^a-zA-Z0-9[:space:]]','')
WHERE
(regexp_like(column1, '[^a-zA-Z0-9[:space:]]' ) OR
regexp_like(column2, '[^a-zA-Z0-9[:space:]]' ) OR
regexp_like(column3, '[^a-zA-Z0-9[:space:]]' )
);
1 row updated