Oracle中如何用SQL检测字段是否包括中文字符

有个问题,没有考虑中文编码字符,由于迁移的表有几千万数据,但是有中文的记录集很少,问我能否找出有中文内容的记录数。首先我想到的是采用检测每个字节ASCII的方式,这样的话需要写一个自定义函数,然后SQL中调用得到结果。但是感觉这个方法估计很耗时,毕竟每个字符都要比较,所以没有去实现。突然想到Oracle有一个编码转换的函数叫Convert,如果一个字符串编码转换前后不一样就表示字符串里面含有非ASCII字符,这样就得到结果。最后写出来测试了一下,确实可行,5500万记录10秒钟就扫描结束。以下是测试用例:

SQL> select *
  2    from (select 'abcd' c1 from dual
  3          union all
  4          select 'ab测试cd' c1 from dual)
  5   where c1 <> CONVERT(c1, 'US7ASCII', 'ZHS16GBK');
 
C1
--------
ab测试cd

CONVERT函数说明:

CONVERT(inputstring,dest_charset,source_charset)

inputstring:要转换的字符串

dest_charset:目标字符集

source_charset:原字符集

posted on 2013-02-06 16:02 youngturk 阅读(622) 评论(0)  编辑  收藏 所属分类: Oracle


只有注册用户登录后才能发表评论。


网站导航:
 
<2013年2月>
272829303112
3456789
10111213141516
17181920212223
242526272812
3456789

导航

统计

公告

this year :
1 jQuery
2 freemarker
3 框架结构
4 口语英语

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

相册

EJB学习

Flex学习

learn English

oracle

spring MVC web service

SQL

Struts

生活保健

解析文件

搜索

最新评论

阅读排行榜

评论排行榜