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

          生活保健

          解析文件

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 文成县| 定结县| 旺苍县| 图们市| 五指山市| 新巴尔虎右旗| 靖州| 丁青县| 阿瓦提县| 黑水县| 双桥区| 东阳市| 康乐县| 杭锦旗| 西充县| 行唐县| 祁阳县| 普定县| 湖州市| 邵阳市| 阿瓦提县| 长宁区| 抚州市| 都江堰市| 临西县| 乐清市| 江山市| 天门市| 象州县| 德令哈市| 康乐县| 三原县| 花莲市| 嘉义县| 星座| 江门市| 龙山县| 扎鲁特旗| 彩票| 白玉县| 翼城县|