技巧:取拼音码的几种方法

拼音码生成

1、程序函数生成

 function   GetPyCode(const   AHzStr:   string):   string;  
  const  
  ChinaCode:   array[0..25,   0..1]   of   Integer   =   ((1601,   1636),   (1637,   1832),   (1833,   2077),  
  (2078,   2273),   (2274,   2301),   (2302,   2432),   (2433,   2593),   (2594,   2786),   (9999,   0000),  
  (2787,   3105),   (3106,   3211),   (3212,   3471),   (3472,   3634),   (3635,   3722),   (3723,   3729),  
  (3730,   3857),   (3858,   4026),   (4027,   4085),   (4086,   4389),   (4390,   4557),   (9999,   0000),  
  (9999,   0000),   (4558,   4683),   (4684,   4924),   (4925,   5248),   (5249,   5589));  
  var  
  i,   j,   HzOrd:   integer;  
  Hz:   string[2];  
  begin  
  i   :=   1;  
  while   i   <=   Length(AHzStr)   do  
  begin  
  if   (AHzStr[i]   >=   #160)   and   (AHzStr[i   +   1]   >=   #160)   then  
  begin  
  HzOrd   :=   (Ord(AHzStr[i])   -   160)   *   100   +   Ord(AHzStr[i   +   1])   -   160;  
  for   j   :=   0   to   25   do  
  begin  
  if   (HzOrd   >=   ChinaCode[j][0])   and   (HzOrd   <=   ChinaCode[j][1])   then  
  begin  
  Result   :=   Result   +   char(byte('A')   +   j);  
  break;  
  end;  
  end;  
  Inc(i);  
  end   else   Result   :=   Result   +   AHzStr[i];  
  Inc(i);  
  end;  
  end;  
   
  调用:  
  ---------------------------  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      Edit2.Text   :=   GetPyCode(Edit1.Text);  
  end;   

2、通过 SQL函数生成
CREATE function fn_getpy(@str nvarchar(4000))
returns nvarchar(4000)
as
begin
declare @intLen int
declare @strRet nvarchar(4000)
declare @temp nvarchar(100)

set @intLen = len(@str)
set @strRet = ''

while @intLen > 0
begin
set @temp = ''

select @temp = case
when substring(@str,@intLen,1) >= '帀' then 'Z'
when substring(@str,@intLen,1) >= '丫' then 'Y'
when substring(@str,@intLen,1) >= '夕' then 'X'
when substring(@str,@intLen,1) >= '屲' then 'W'
when substring(@str,@intLen,1) >= '他' then 'T'
when substring(@str,@intLen,1) >= '仨' then 'S'
when substring(@str,@intLen,1) >= '呥' then 'R'
when substring(@str,@intLen,1) >= '七' then 'Q'
when substring(@str,@intLen,1) >= '妑' then 'P'
when substring(@str,@intLen,1) >= '噢' then 'O'
when substring(@str,@intLen,1) >= '拏' then 'N'
when substring(@str,@intLen,1) >= '嘸' then 'M'
when substring(@str,@intLen,1) >= '垃' then 'L'
when substring(@str,@intLen,1) >= '咔' then 'K'
when substring(@str,@intLen,1) >= '丌' then  'J'
when substring(@str,@intLen,1) >= '铪' then 'H'
when substring(@str,@intLen,1) >= '旮' then 'G'
when substring(@str,@intLen,1) >= '发' then 'F'
when substring(@str,@intLen,1) >= '妸' then 'E'
when substring(@str,@intLen,1) >= '咑' then 'D'
when substring(@str,@intLen,1) >= '嚓' then 'C'
when substring(@str,@intLen,1) >= '八' then 'B'
when substring(@str,@intLen,1) >= '吖' then 'A'
else rtrim(ltrim(substring(@str,@intLen,1)))
end

--对于汉字特殊字符,不生成拼音码
if (ascii(@temp)>127) set @temp = ''

--对于英文中小括号,不生成拼音码
if @temp = '(' or @temp = ')' set @temp = ''

select @strRet = @temp + @strRet

set @intLen = @intLen - 1
end

return lower(@strRet)
end
go

--调用
--select dbo.fn_getpy('张三')

3、通过字典表生成

思路:把汉字的拼音码导成字典,把需要生成拼音码的字符从中找出对应拼音码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值