赛迪网 > IT技术 数据库 > 精彩更新
  IT资讯搜索
 
IT产品搜索

在SQL Server2000中处理半个汉字的问题 (1)

发布时间:2007.08.02 04:55     来源:赛迪网    作者:yangguo

问:由于从其它数据库中导入的数据存在半个汉字的问题,所以希望能在查询语句中将这半个汉字处理掉,请问怎样才能解决这个问题?

答:“汉字是由两个字节存储的,每个字节的数值都>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 @sTmp=@sTmp+@stmp2 

   select @i=@i+1

  end

   return @stmp

end

1 2 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· SQL语句在何种情况下全表扫描 (08-01) · 通过分析SQL语句的执行计划优化SQL(六) (08-01)
· 安装SQL Server2K可能引发一个严重问题 (08-01) · SQL数据库应聘人员面试时经常被问的问题 (08-01)
· SQL的悲乐锁定 (08-01) · Web开发中用sql语句完成分页的特效方法 (08-01)
· Sybase SQL的内存缓冲区管理和性能调整 (07-31) · SQL Server2000实用教程高职(sql2000) (07-31)
· 教你怎样打造SQL Server2000的安全策略 (07-31) · SQL的6种移动 (07-31)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管