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 閱讀(637) 評論(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

          生活保健

          解析文件

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 东海县| 荆门市| 霸州市| 邵武市| 太谷县| 遂川县| 桂东县| 浦东新区| 岳阳市| 海口市| 绥宁县| 郯城县| 海盐县| 曲阳县| 永登县| 思南县| 达拉特旗| 色达县| 昔阳县| 双峰县| 阿拉善左旗| 安西县| 同江市| 长顺县| 额尔古纳市| 安仁县| 忻城县| 台东县| 读书| 义乌市| 哈尔滨市| 潢川县| 岳阳市| 德兴市| 常德市| 嫩江县| 永清县| 县级市| 广丰县| 财经| 会东县|