使用 FOR 循环通过 REGEXP_REPLACE 从列中删除并更新所有垃圾字符

问题描述 投票:0回答:1

我有一个包含 10 多列的表。有些数据包含箭头、®、¼、â 等垃圾字符...我想使用 REGEXP_REPLACEUPDATE 语句中使用 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:]]' );
for-loop plsql sql-update regexp-replace
1个回答
2
投票

为此,您不需要 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



© www.soinside.com 2019 - 2024. All rights reserved.