SQL根据GBK编码取汉字的拼音首字母的存储过程

 /*给出汉字字符串,输出其汉语拼音首字母的存储过程*/
  create proc pinyin @var varchar(100)
  as
  begin
   set @var=ltrim(rtrim(@var))
   --去掉左右空格
   declare @i int,@v varbinary(2),@varchar varchar(100),@pinyin varchar(100)
   --@v varbinary的长度一定为2,因为GBK编码为4位16进制数即2个字节,如果不标明长度,默认为1字节,后面的代码将被截取
   set @pinyin=''
   set @i=1
   --置初值
   while @i<=len(@var)
   -->@var长度时退出循环
   begin
   set @v=cast(substring(@var,@i,1) as varbinary)
   --cast将该位置字符转换为二进制
   if @v<0xB0A1 or @v>0xD7FD
   --编码为四位16进制,前面的0x代表后面为十六进制,并不是GBK编码实际内容
   begin
   set @varchar=substring(@var,@i,1)
   end
   --如字符不属于汉字则输出原样字符
   else if @v>=0xB0A1 and @v<=0xB0C4
   begin
   set @varchar='A'
   end
   else if @v>=0xB0C5 and @v<=0xB2C0
   begin
   set @varchar='B'
   end
   else if @v>=0xB2C1 and @v<=0xB2C0
   begin
   set @varchar='C'
   end
   else if @v>=0xB4EE and @v<=0xB6E9
   begin
   set @varchar='D'
   end
   else if @v>=0xB6EA and @v<=0xB7A1
   begin
   set @varchar='E'
   end
   else if @v>=0xB7A2 and @v<=0xB8C0
   begin
   set @varchar='F'
   end
   else if @v>=0xB8C1 and @v<=0xB9FD
   begin
   set @varchar='G'
   end
   else if @v>=0xB9EE and @v<=0xBBF6
   begin
   set @varchar='H'
   end
   else if @v>=0xBBF7 and @v<=0xBFA5
   begin
   set @varchar='J'
   end
   else if @v>=0xBFA6 and @v<=0xC0AB
   begin
   set @varchar='K'
   end
   else if @v>=0xC0AC and @v<=0xC2E7
   begin
   set @varchar='L'
   end
   else if @v>=0xC2E8 and @v<=0xC4C2
   begin
   set @varchar='M'
   end
   else if @v>=0xC4C3 and @v<=0xC5B5
   begin
   set @varchar='N'
   end
   else if @v>=0xC5B6 and @v<=0xC5BD
   begin
   set @varchar='O'
   end
   else if @v>=0xC5BE and @v<=0xC6D9
   begin
   set @varchar='P'
   end
   else if @v>=0xC6DA and @v<=0xC8BA
   begin
   set @varchar='Q'
   end
   else if @v>=0xC8BB and @v<=0xC8F5
   begin
   set @varchar='R'
   end
   else if @v>=0xC8F6 and @v<=0xCBF9
   begin
   set @varchar='S'
   end
   else if @v>=0xCBFA and @v<=0xCDD9
   begin
   set @varchar='T'
   end
   else if @v>=0xCDDA and @v<=0xCEF3
   begin
   set @varchar='W'
   end
   else if @v>=0xCEF4 and @v<=0xD1B8
   begin
   set @varchar='X'
   end
   else if @v>=0xD1B9 and @v<=0xD4D0
   begin
   set @varchar='Y'
   end
   else if @v>=0xD4D1 and @v<=0xD7FD
   begin
   set @varchar='Z'
   end
  
  
   set @pinyin=@pinyin+@varchar
   --结果连接在结果字符串右边
   set @i=@i+1
   end
   print @pinyin
  end
  --drop proc pinyin
  
  exec pinyin '啊!我爱你'  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值