ORACLE判别字段是否包含中文
来源:互联网 发布:linux 没有rc.local 编辑:程序博客网 时间:2024/05/19 02:29
在ORACLE数据库中如何查找那些字段里面包含中文的数据记录呢,有时候就是有这样的特殊需求,下面整理了一些判别字段中包含中文记录的几个方法
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判别字段是否包含中文
- ORACLE判别字段是否包含中文
- ORACLE判别字段是否包含中文
- ORACLE判别字段是否包含中文(P1)或中文包含非中文(P2)
- Oracle中判断字段是否包含中文
- MSSQL判断字段是否包含中文汉字
- 如何判别字段中是否包含了emojicon表情以及过滤相关内容
- 判别是否包含了emojicon表情
- 创建标量值函数判断某个字段是否包含中文
- Android 中 判断某个字段是否包含中文
- mysql查询某一个字段是否包含中文字符
- oracle 查询某字段字符串是否包含某字符串
- oracle 查询表是否包含某一给定字段
- 用oracle函数判断字符串中是否包含中文
- 用oracle函数判断字符串中是否包含中文
- Oracle字段包含其他字段
- 判断JSON是否包含字段
- 判断Oracle字段中是否存在中文《asciistr函数》
- 查看AIX文件系统分布所在的物理磁盘
- 并发编程(2)进程/线程的理解
- 整理bash之各种展开(expansion)
- win10下eclipse中打开图片乱码解决
- Spark性能优化的10大问题及其解决方案
- ORACLE判别字段是否包含中文
- 移动端H5各种各样的列表的制作方法(一) by FungLeo
- 嵌入式Linux之我行——ARM MMU工作原理剖析
- 如何mac上安装apk到连接数据线的手机
- 用java写一个双向链表
- Maven学习总结(九)——使用Nexus搭建Maven私服
- sdk tools 升级到25.0.10,编译APK提示Unsupported major.minor version 52.0
- Suse 11安装VMware Tools
- 非安装版Tomcat不能手动启动问题解决