获取拼音首字母函数

本文介绍了一个SQL函数fGetPy,用于从输入的汉字字符串中提取每个汉字的拼音首字母,并将其串联成一个新的字符串。该函数适用于助记码查询等应用场景。通过使用CASE语句和字符编码对照表,函数能够识别并转换大部分汉字到其对应的拼音首字母。

None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**//*-1.-获得汉字字符串的首字母
InBlock.gif
InBlock.gif   根据大力的贴子改成.将大力的两个函数合并成了一个函数.
InBlock.gif   可以应用于助记码的查询
ExpandedBlockEnd.gif--转载(最早见于j9988的发表,具体原作者不明)--
*/

None.gif
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fGetPy]'and xtype in (N'FN', N'IF', N'TF'))
None.gif
drop function [dbo].[fGetPy]
None.gif
GO
None.gif
None.gif
--创建取拼音函数
None.gif
create function fGetPy(@Str varchar(500)='')
None.gif
returns varchar(500)
None.gif
as
None.gif
begin
None.gif 
declare @strlen int,@return varchar(500),@ii int
None.gif 
declare @n int,@c char(1),@chn nchar(1)
None.gif
None.gif 
select @strlen=len(@str),@return='',@ii=0
None.gif 
set @ii=0
None.gif 
while @ii<@strlen
None.gif 
begin
None.gif  
select @ii=@ii+1,@n=63,@chn=substring(@str,@ii,1)
None.gif  
if @chn>'z'
None.gif  
select @n = @n +1
None.gif     ,
@c = case chn when @chn then char(@nelse @c end
None.gif   
from(
None.gif    
select top 27 * from (
None.gif     
select chn = ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''  --because have no 'i'
None.gif
     union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''  --no 'u'
None.gif
     union all select ''  --no 'v'
None.gif
     union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select @chnas a
None.gif    
order by chn COLLATE Chinese_PRC_CI_AS 
None.gif   ) 
as b
None.gif  
else set @c='a'
None.gif  
set @return=@return+@c
None.gif 
end
None.gif 
return(@return)
None.gif
end
None.gif
None.gif
go
None.gif
--测试
None.gif
select dbo.fgetpy('东莞市'as 东莞市,dbo.fgetpy('ab中c国人'as 中国人
None.gif
None.gif
--删除拼音函数
None.gif
drop function fgetpy
None.gif
None.gif
=========================
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**//*-1.-获得汉字字符串的首字母
InBlock.gif
InBlock.gif   根据大力的贴子改成.将大力的两个函数合并成了一个函数.
InBlock.gif   可以应用于助记码的查询
ExpandedBlockEnd.gif--转载(最早见于j9988的发表,具体原作者不明)--
*/

None.gif
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fGetPy]'and xtype in (N'FN', N'IF', N'TF'))
None.gif
drop function [dbo].[fGetPy]
None.gif
GO
None.gif
None.gif
--创建取拼音函数
None.gif
create function fGetPy(@Str varchar(500)='')
None.gif
returns varchar(500)
None.gif
as
None.gif
begin
None.gif 
declare @strlen int,@return varchar(500),@ii int
None.gif 
declare @n int,@c char(1),@chn nchar(1)
None.gif
None.gif 
select @strlen=len(@str),@return='',@ii=0
None.gif 
set @ii=0
None.gif 
while @ii<@strlen
None.gif 
begin
None.gif  
select @ii=@ii+1,@n=63,@chn=substring(@str,@ii,1)
None.gif  
if @chn>'z'
None.gif  
select @n = @n +1
None.gif     ,
@c = case chn when @chn then char(@nelse @c end
None.gif   
from(
None.gif    
select top 27 * from (
None.gif     
select chn = ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''  --because have no 'i'
None.gif
     union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''  --no 'u'
None.gif
     union all select ''  --no 'v'
None.gif
     union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select ''
None.gif     
union all select @chnas a
None.gif    
order by chn COLLATE Chinese_PRC_CI_AS 
None.gif   ) 
as b
None.gif  
else set @c=@chn    --这里我改了一下,英文的字母保持不变
None.gif
  set @return=@return+@c
None.gif 
end
None.gif 
return(@return)
None.gif
end
None.gif
None.gif
go
None.gif
--测试
None.gif
select dbo.fgetpy('东莞市'as 东莞市,dbo.fgetpy('ab中c国人'as 中国人
None.gif
None.gif
--删除拼音函数
None.gif
drop function fgetpy
None.gif
None.gif
None.gif

转载于:https://www.cnblogs.com/netgarden/archive/2007/03/19/679357.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值