获取拼音首字母函数



/*-1.-获得汉字字符串的首字母

   根据大力的贴子改成.将大力的两个函数合并成了一个函数.
   可以应用于助记码的查询
--转载(最早见于j9988的发表,具体原作者不明)--
*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fGetPy]'and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fGetPy]
GO

--创建取拼音函数
create function fGetPy(@Str varchar(500)='')
returns varchar(500)
as
begin
 
declare @strlen int,@return varchar(500),@ii int
 
declare @n int,@c char(1),@chn nchar(1)

 
select @strlen=len(@str),@return='',@ii=0
 
set @ii=0
 
while @ii<@strlen
 
begin
  
select @ii=@ii+1,@n=63,@chn=substring(@str,@ii,1)
  
if @chn>'z'
  
select @n = @n +1
     ,
@c = case chn when @chn then char(@nelse @c end
   
from(
    
select top 27 * from (
     
select chn = ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''  --because have no 'i'
     union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''  --no 'u'
     union all select ''  --no 'v'
     union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select @chnas a
    
order by chn COLLATE Chinese_PRC_CI_AS 
   ) 
as b
  
else set @c='a'
  
set @return=@return+@c
 
end
 
return(@return)
end

go
--测试
select dbo.fgetpy('东莞市'as 东莞市,dbo.fgetpy('ab中c国人'as 中国人

--删除拼音函数
drop function fgetpy

=========================

/*-1.-获得汉字字符串的首字母

   根据大力的贴子改成.将大力的两个函数合并成了一个函数.
   可以应用于助记码的查询
--转载(最早见于j9988的发表,具体原作者不明)--
*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fGetPy]'and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fGetPy]
GO

--创建取拼音函数
create function fGetPy(@Str varchar(500)='')
returns varchar(500)
as
begin
 
declare @strlen int,@return varchar(500),@ii int
 
declare @n int,@c char(1),@chn nchar(1)

 
select @strlen=len(@str),@return='',@ii=0
 
set @ii=0
 
while @ii<@strlen
 
begin
  
select @ii=@ii+1,@n=63,@chn=substring(@str,@ii,1)
  
if @chn>'z'
  
select @n = @n +1
     ,
@c = case chn when @chn then char(@nelse @c end
   
from(
    
select top 27 * from (
     
select chn = ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''  --because have no 'i'
     union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select ''  --no 'u'
     union all select ''  --no 'v'
     union all select ''
     
union all select ''
     
union all select ''
     
union all select ''
     
union all select @chnas a
    
order by chn COLLATE Chinese_PRC_CI_AS 
   ) 
as b
  
else set @c=@chn    --这里我改了一下,英文的字母保持不变
  set @return=@return+@c
 
end
 
return(@return)
end

go
--测试
select dbo.fgetpy('东莞市'as 东莞市,dbo.fgetpy('ab中c国人'as 中国人

--删除拼音函数
drop function fgetpy


posted on 2007-03-19 08:50  Gardener  阅读(510)  评论(0编辑  收藏  举报