判断Oracle记录是否含中文字
2012-05-30 08:59
204 查看
http://www.asplearn.net/Wangluobiancheng/Oracle/80015.html
由于迁移的表有几千万数据,但是有中文的记录集很少,能否找出有中文内容的记录数。首先采用检测每个字节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:原字符集
这只是一个小技巧,也许有一天你也有这样的需求,或许能派上用场。
由于迁移的表有几千万数据,但是有中文的记录集很少,能否找出有中文内容的记录数。首先采用检测每个字节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:原字符集
这只是一个小技巧,也许有一天你也有这样的需求,或许能派上用场。
相关文章推荐
- Oracle Length 和 Lengthb 函数说明 .(用来判断记录值里是否有中文内容)
- Oracle: DELETE前不需SELECT判断记录是否存在,INSERT前不需SELECT判断是否有若干字段值重复的记录。
- Oracle sql判断一个字段是否全数字 或含有中文
- 用oracle函数判断字符串中是否包含中文
- 用oracle函数判断字符串中是否包含中文
- oracle 插入数据之前判断是否有记录
- Oracle PLSQL Demo - 22.查看字符串的长度[lengthb, length],判断字符串是否包含中文
- Oracle取字符串长度以及判断是否含有中文
- Oracle Length 和 Lengthb 函数说明 .(用来判断记录值里是否有中文内容)
- 如何判断Oracle字段中是否包含中文的方法
- oracle中判断记录是否存在
- 工作记录:如何判断一个字符串是否包含中文呢?
- oracle中 判断是否 有记录 然后插入的sql语句
- Oracle中判断字段是否包含中文
- 判断Oracle字段中是否存在中文《asciistr函数》
- Oracle 中文记录 及 乱码 判断 说明
- Oracle删除表之前判断表是否存在
- Ext.grid.GridPanel中判断是否记录被选择(三种情况)
- java判断获取到的中文字符串是否乱码
- 判断字符串是否全是中文,和包含中文