VARCHAR2 列中的无效字符 - Oracle

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

我想找出 Oracle 中的 VARCHAR2 列不支持哪些字符。当我使用 asciistr(column) <> 列(下面提供的查询)过滤 VARCHAR2 字段时,我发现某些字符被“BF”代码替换。我想找出这些字符是什么,以便我可以在收集数据本身时添加一个条件来排除它们。

查询:

select name, asciistr(name) as encoded_name from table 
where asciistr(name) <> name

输出:

名字 编码名称
as¿d 作为BFd
b¿ef b BFef

我想识别 VARCHAR2 列中被

¿
字符替换的字符。

oracle oracle-sqldeveloper
1个回答
0
投票

要识别 Unicode 字符

¿
'\00bf'
,请使用如下条件:

select name, 
    asciistr(name) as encoded_name 
from table 
where REGEXP_SUBSTR(name, unistr('\00bf'), 1) is not null;

要识别所有包含任何 Unicode 字符的名称,查询是:

select name, 
    asciistr(name) as encoded_name 
from table
where REGEXP_SUBSTR(asciistr(name), '\\[[:xdigit:]]{4}') is not null

要替换 Unicode 字符,请使用查询:

select name, asciistr(name),
   replace(name, unistr('\00bf')) as replace_single_unicode,
   REGEXP_REPLACE(asciistr(name), '\\[[:xdigit:]]{4}', '') as replace_all_unicode
from t0;

enter image description here

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