暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle 如何判别字段包含中文

原创 不吃草的牛_Nick 2022-09-26
711

1:使用ASCIISTR函数判别
ASCIISTR返回字符的ASCII形式的字符串。非ASCII的字符被转化为\xxxx的形式。

使用ASCIISTR函数也是根据非ASCII字符会被转化这个特性来判别中文字符,只要里面包含中文字符,则必定会有\xxx这样的字符。且简体汉字的编码范围是B0A1 - F7FE
drop table test;

CREATE TABLE TEST
(
NAME_ONE CHAR(24),
NAME_TWO VARCHAR2(24),
NAME_THR NCHAR(24),
NAME_FOR NVARCHAR2(24)
);

INSERT INTO TEST
SELECT 'abc10', 'abc20', 'abc30', 'abc40' FROM DUAL UNION ALL
SELECT 'abc11', 'abc21', 'abc31', 'abc41' FROM DUAL UNION ALL
SELECT 'abc12', 'abc22', 'abc32', 'abc42' FROM DUAL UNION ALL
SELECT 'abc1!', 'abc2!', 'abc3!', 'abc4!' FROM DUAL UNION ALL
SELECT 'abc1#', 'abc2#', 'abc3#', 'abc4#' FROM DUAL UNION ALL
SELECT 'abc1$', 'abc2$', 'abc3$', 'abc4$' FROM DUAL UNION ALL
SELECT 'ab测试1', 'ab测试2', 'ab测试3', 'ab测试4' FROM DUAL;

select * from test;
使用 ASCIISTR(NAME_ONE) LIKE '%\%' 就能判别那些有中文的记录。如下所示:
select asciistr(name_one) as name_asci, name_one from test;

select name_one from test where asciistr(name_one) like '%\%';

但是如果字段里面的非ASCII字符不仅仅有中文,例如还有日文之类,那么这个方法就不能准确判别了,如下所示,我插入一条包含日文的记录.
INSERT INTO TEST
SELECT 'abこんにちは1', 'abこんにちは2', 'abこんにちは3', 'abこんにちは4' FROM DUAL;
COMMIT;

select asciistr(name_one) as name_asci, name_one from test;

select name_one from test where asciistr(name_one) like '%\%';

2:使用CONVERT函数判别
CONVERT(inputstring,dest_charset,source_charset)

inputstring:要转换的字符串
dest_charset:目标字符集
source_charset:原字符集

SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';

SELECT NAME_ONE, NAME_TWO FROM TEST WHERE NAME_ONE <> CONVERT(NAME_ONE, 'UTF8', 'ZHS16GBK');

SELECT NAME_ONE, NAME_TWO FROM TEST WHERE NAME_ONE <> CONVERT(NAME_ONE, 'ZHS16GBK', 'UTF8');

3:使用函数length和lengthb来判别
使用函数length与lengthb来判别,是基于中文字符占用2~4个字节,而ASCII字符占用一个字节,那么对比LENGTH与LENGTHB就会不一样。这样就能判别字段中是否包含中文字符,但是跟ASCIISTR一样,如果里面的非ASCI字符包含非中文,它一样不能判别。依然有取巧嫌疑。
SELECT NAME_ONE FROM TEST WHERE LENGTH(NAME_ONE) != LENGTHB(NAME_ONE);
SELECT NAME_ONE,
LENGTH('ab测试1'),
LENGTHB('ab测试1'),
LENGTH('abこんにちは1'),
LENGTHB('abこんにちは1')
FROM TEST;



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论