国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

如何在SQL Server2000中處理半個漢字的問題

2024-08-31 00:48:24
字體:
來源:轉載
供稿:網友
注冊會員,創建你的web開發資料庫,
/* written by enydraboy ,2003-07-17 */
/*發表于csdn */
/* 轉載請注明出處和保留此版權信息 */

在csdn的專家論壇中,看到有一位朋友問起關于“由于從其它數據庫中導入的數據存在半個漢字的問題,所以希望能在查詢語句中將這半個漢字處理掉,怎么處理都行。望各位高手不吝賜教!”的問題,啟初有點意外,但是后來覺得從這個問題可以帶出一些sql server漢字中存儲和處理的方法,覺得有必要總結一下。

漢字是由兩個字節存儲的,每個字節的數值都>127。所以上面的問題的解決方案就是:把字符串按字節順序截取,當出現第一個字節是>127,但是后面一個字節是<127的這種情況,就丟棄掉。

接下來,我們要明確些技術細節:

(1) 在sql server中有很多字符串相關的操作函數,但是直接去操作包含了漢字的字符串,會有點問題。說明如下:len計算長度的時候,會把漢字和英文字符都看成長度一樣的;substring也是這樣,ascii是返回第一個字節的ascii 碼。

example:

select len('你好a'),substring('你好a',1,1),ascii('你')

結果是

                            

-----------       ---- -       ----------

3           你          196

一定要把字符串要轉換成varbinary來處理,才可以。

 

(2) sql server中,如何把ascii碼組合成漢字,就是把高字節和底字節分別轉成字符再拼接起來。如char(210)+char(166)就是姚這個漢字。

再明確了上面的技術細節后,接下來就可以解決問題了。我通過編寫一個函數來解決問題。

create function fn_truncsemihanzi(@str varchar(4000))

returns  varchar(8000)

as

begin

declare

@stmp varchar(8000),@i int,@itmp int,@itmp2 int ,@stmp2 varchar(2)

select @stmp=''

  select @i=1

  while @i<=len(@str)

  begin

     select @itmp=convert(int,substring(convert(varbinary,substring(@str ,@i,1)),1,1)) --截取一個字節

    if @itmp>127  

    begin

      --大于127檢查后面一個字節

select @itmp2=convert(int,substring(convert(varbinary,substring(@str ,@i,1)),2,1))

       if @itmp2>127

      begin

        select @stmp2=char(@itmp)+char(@itmp2)   --是一個完整的漢字

     end

     else

     begin

        select @stmp2=char(@itmp2)   --丟棄半個漢字

    end

  end

  else

  begin

      select @stmp2=char(@itmp)

  end

   select @[email protected][email protected]

   select @[email protected]+1

  end

   return @stmp

end

測試如下:

declare @str varchar(4000)

-- 設置參數值

-- 設置參數值

--帶有半個漢字,是你這個漢字的前面一部分

select @str='b'+char(convert(int,substring(convert(varbinary,'你'),1,1)))+'a你'

select @str  帶有半個漢字,dbo.fn_truncsemihanzi(@str) 去掉半個漢字

 

帶有半個漢字   長度    去掉半個漢字   長度         

------------------ ----------- --------------- -------------------

b腶你          3      ba你             3

 

我們還可以發現這樣一個有趣的現象,由于我是截了半個漢字出來,結果你的前半個漢字的字符和后面一個英文字母a 組合,成了一個怪怪的字符腶。

總結,通過這個問題的解決,大家可以了解漢字在sql server2000中存儲和處理的基本方法,像如何區分一個字符串中是否包含了漢字,和分離字符串中中文和英文都可以套用本文中方法。
本文中測試的環境是win2000 server(中文)+sql server 2000(中文),英文環境下沒有測試,如有問題,歡迎大家指正。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 固安县| 淮阳县| 普定县| 荣昌县| 海原县| 韶山市| 巴塘县| 庄河市| 云梦县| 武汉市| 镇赉县| 宿松县| 三台县| 达孜县| 城口县| 安福县| 万全县| 六盘水市| 鹤山市| 东乌珠穆沁旗| 大兴区| 台北县| 松阳县| 垫江县| 新疆| 武穴市| 镇原县| 抚顺市| 根河市| 宝鸡市| 南华县| 通榆县| 广州市| 余干县| 高邮市| 海晏县| 抚顺市| 呼和浩特市| 环江| 双辽市| 浦江县|