方法1:用编码转换函数Convert;方法2:通过判断字符长度与字节长度是否一致看出是否有中文( WHERE length("ab测试cd") != lengthb("ab测试cd") )。今天有一个同事的数据迁移程序有个问题,没有考虑中文编码字符,由于迁移的表有几千万数据,但是有中文的记录集很少,问我能否找出有中文内容的记录数。首先我想到的是采用检测每个字节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测试cdCONVERT函数说明:CONVERT(inputstring,dest_charset,source_charset)inputstring:要转换的字符串dest_charset:目标字符集source_charset:原字符集这只是一个小技巧,也许有一天你也有这样的需求,或许能派上用场。Oracle 12c新特性之翻页查询为什么SQL Server数据文件和日志文件最后更新日期不准?相关资讯 Oracle实例
- Oracle 关于实例恢复的一个讨论 (08/13/2015 21:01:24)
- Oracle实例恢复阶段以及flashback (09/17/2014 17:27:13)
- Oracle创建实例报错处理 (05/26/2014 19:47:29)
| - Oracle 11g在Linux上建立第二个实 (05/28/2015 05:57:28)
- Oracle 实例创建脚本 (08/14/2014 10:11:56)
- Oracle translate() 详解+实例 (10/23/2013 15:48:59)
|
本文评论 查看全部评论 (0)