Oracle中如何用SQL檢測字段是否包括中文字符

          有個問題,沒有考慮中文編碼字符,由于遷移的表有幾千萬數據,但是有中文的記錄集很少,問我能否找出有中文內容的記錄數。首先我想到的是采用檢測每個字節(jié)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 閱讀(648) 評論(0)  編輯  收藏 所屬分類: Oracle

          <2013年2月>
          272829303112
          3456789
          10111213141516
          17181920212223
          242526272812
          3456789

          導航

          統(tǒng)計

          公告

          this year :
          1 jQuery
          2 freemarker
          3 框架結構
          4 口語英語

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          EJB學習

          Flex學習

          learn English

          oracle

          spring MVC web service

          SQL

          Struts

          生活保健

          解析文件

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 沁阳市| 巴楚县| 陵水| 扎赉特旗| 九龙县| 韶山市| 河津市| 肇庆市| 莱西市| 广饶县| 色达县| 阜新| 峨山| 巴马| 新和县| 乌恰县| 阿拉尔市| 志丹县| 扎囊县| 岳阳市| 镇平县| 江阴市| 海兴县| 施秉县| 永新县| 高尔夫| 花垣县| 邢台县| 甘孜县| 鸡东县| 永平县| 桐乡市| 上林县| 三都| 康平县| 岱山县| 渝中区| 永济市| 江西省| 宁都县| 海丰县|