<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          ORACLE判別字段是否包含中文 您所在的位置:網(wǎng)站首頁 屬狗的和屬蛇的合不合婚 ORACLE判別字段是否包含中文

          ORACLE判別字段是否包含中文

          2023-10-01 16:07| 來源: 網(wǎng)絡(luò)整理| 查看: 265

          ??? 在ORACLE數(shù)據(jù)庫中如何查找那些字段里面包含中文的數(shù)據(jù)記錄呢,有時候就是有這樣的特殊需求,下面整理了一些判別字段中包含中文記錄的幾個方法

          ?

          1:使用ASCIISTR函數(shù)判別

          ?

          ASCIISTR函數(shù)說明:

          ASCIISTR返回字符的ASCII形式的字符串。非ASCII的字符被轉(zhuǎn)化為\xxxx的形式。

          使用ASCIISTR函數(shù)也是根據(jù)非ASCII字符會被轉(zhuǎn)化這個特性來判別中文字符,只要里面包含中文字符,則必定會有\(zhòng)xxx這樣的字符。且簡體漢字的編碼范圍是B0A1 - F7FE.如下例子所示

          CREATE?TABLE TEST(??? NAME_ONE?? CHAR(24)?? ,NAME_TWO?? VARCHAR2(24)?? ,NAME_THR?? NCHAR(24)?? ,NAME_FOR?? NVARCHAR2(24))?INSERT INTO TESTSELECT?'abc10', 'abc20', 'abc30', 'abc40'???????? FROM DUAL UNION?ALLSELECT?'abc11', 'abc21', 'abc31', 'abc41'???????? FROM DUAL UNION?ALLSELECT?'abc12', 'abc22', 'abc32', 'abc42'???????? FROM DUAL UNION?ALLSELECT?'abc1!', 'abc2!', 'abc3!', 'abc4!'???????? FROM DUAL UNION?ALLSELECT?'abc1#', 'abc2#', 'abc3#', 'abc4#'???????? FROM DUAL UNION?ALLSELECT?'abc1$', 'abc2$', 'abc3$', 'abc4$'???????? FROM DUAL UNION?ALLSELECT?'ab測試1', 'ab測試2', 'ab測試3', 'ab測試4'?FROM DUAL;

          使用 ASCIISTR(NAME_ONE) LIKE '%\%' 就能判別那些有中文的記錄。如下所示:

          SELECT NAME_ONE FROM TEST WHERE ASCIISTR(NAME_ONE) LIKE?'%\%'?

          但是如果字段里面的非ASCII字符不僅僅有中文,例如還有日文之類,那么這個方法就不能準(zhǔn)確判別了,如下所示,我插入一條包含日文的記錄.

          INSERT INTO TEST?SELECT?'abこんにちは1', 'abこんにちは2', 'abこんにちは3', 'abこんにちは4'?FROM DUAL;?COMMIT;??SQL> SELECT NAME_ONE FROM TEST WHERE ASCIISTR(NAME_ONE) LIKE?'%\%';?NAME_ONE------------------------ab測試1abこんにちは1

          ?

          2:使用CONVERT函數(shù)判別

          CONVERT函數(shù)說明:

          CONVERT(inputstring,dest_charset,source_charset)

          ?? inputstring:要轉(zhuǎn)換的字符串

          ???? dest_charset:目標(biāo)字符集

          ???? source_charset:原字符集

          SQL> SELECT * FROM NLS_DATABASE_PARAMETERS WHERE?PARAMETER='NLS_CHARACTERSET';?PARAMETER????????????????????? VALUE------------------------------ ----------------------------------------NLS_CHARACTERSET?????????????? UTF8?SQL> SELECT NAME_ONE, NAME_TWO FROM TEST WHERE? NAME_ONE CONVERT(NAME_ONE, 'ZHS16GBK', 'UTF8');?NAME_ONE???????????????? NAME_TWO??????????????? ------------------------ ------------------------ ab測試1????????????????? ab測試2??????????????? abこんにちは1??????????? abこんにちは2????

          ?

          3:使用函數(shù)length和lengthb來判別

          ??

          ??? 使用函數(shù)length與lengthb來判別,是基于中文字符占用2~4個字節(jié),而ASCII字符占用一個字節(jié),那么對比LENGTH與LENGTHB就會不一樣。這樣就能判別字段中是否包含中文字符,但是跟ASCIISTR一樣,如果里面的非ASCI字符包含非中文,它一樣不能判別。依然有取巧嫌疑。

          SELECT NAME_ONE FROM TEST WHERE LENGTH(NAME_ONE) != LENGTHB(NAME_ONE);

          ?

          關(guān)于三者的性能,基本上都差不多,并沒有那個性能要快一點。當(dāng)然我沒有詳細(xì)、大量測試過,只是就某個案例的執(zhí)行計劃分析而已。

          ?

          參考資料:

          http://www.bitscn.com/pdb/oracle/201407/240540.html

          http://blog.csdn.net/yzsind/article/details/6106050

          http://blog.itpub.net/9399028/viewspace-687789



          【本文地址】

          公司簡介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實驗室設(shè)備網(wǎng) 版權(quán)所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 芜湖县| 丰原市| 金乡县| 沅陵县| 台安县| 渑池县| 和平县| 东安县| 集安市| 蛟河市| 洪泽县| 望都县| 泾川县| 美姑县| 舟山市| 喀什市| 隆子县| 浦城县| 台中市| 将乐县| 昭苏县| 漾濞| 宜都市| 织金县| 永靖县| 沽源县| 芜湖县| 云梦县| 威宁| 根河市| 瑞安市| 武义县| 甘孜| 剑河县| 乐安县| 民和| 施秉县| 丽水市| 石嘴山市| 高尔夫| 康马县| http://444 http://444 http://444 http://444 http://444 http://444