首页 / ORACLE / ORACLE判别字段是否包含中文
ORACLE判别字段是否包含中文
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ORACLE判别字段是否包含中文,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3098字,纯文字阅读大概需要5分钟。
内容图文
1:使用ASCIISTR函数判别
ASCIISTR函数说明:
ASCIISTR返回字符的ASCII形式的字符串。非ASCII的字符被转化为\xxxx的形式。
使用ASCIISTR函数也是根据非ASCII字符会被转化这个特性来判别中文字符,只要里面包含中文字符,则必定会有\xxx这样的字符。且简体汉字的编码范围是B0A1 - F7FE.如下例子所示
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;
使用 ASCIISTR(NAME_ONE) LIKE ‘%\%‘ 就能判别那些有中文的记录。如下所示:
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;
SQL> SELECT NAME_ONE FROM TEST WHERE ASCIISTR(NAME_ONE) LIKE ‘%\%‘;
NAME_ONE
------------------------
ab测试1
abこんにちは1
2:使用CONVERT函数判别
CONVERT函数说明:
CONVERT(inputstring,dest_charset,source_charset)
inputstring:要转换的字符串
dest_charset:目标字符集
source_charset:原字符集
SQL> SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER=‘NLS_CHARACTERSET‘;
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_CHARACTERSET UTF8
SQL> SELECT NAME_ONE, NAME_TWO FROM TEST WHERE NAME_ONE <> CONVERT(NAME_ONE, ‘ZHS16GBK‘, ‘UTF8‘);
NAME_ONE NAME_TWO
------------------------ ------------------------
ab测试1 ab测试2
abこんにちは1 abこんにちは2
3:使用函数length和lengthb来判别
使用函数length与lengthb来判别,是基于中文字符占用2~4个字节,而ASCII字符占用一个字节,那么对比LENGTH与LENGTHB就会不一样。这样就能判别字段中是否包含中文字符,但是跟ASCIISTR一样,如果里面的非ASCI字符包含非中文,它一样不能判别。依然有取巧嫌疑。
SELECT NAME_ONE FROM TEST WHERE LENGTH(NAME_ONE) != LENGTHB(NAME_ONE);
关于三者的性能,基本上都差不多,并没有那个性能要快一点。当然我没有详细、大量测试过,只是就某个案例的执行计划分析而已。
参考资料:
http://www.bitscn.com/pdb/oracle/201407/240540.html
http://blog.csdn.net/yzsind/article/details/6106050
http://blog.itpub.net/9399028/viewspace-687789
ORACLE判别字段是否包含中文
标签:itblog lengthb arc sel .net 个性 占用 into htm
本文系统来源:http://www.cnblogs.com/zhangyingai/p/7082609.html
内容总结
以上是互联网集市为您收集整理的ORACLE判别字段是否包含中文全部内容,希望文章能够帮你解决ORACLE判别字段是否包含中文所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。