SQL SERVER 联想函数重写

 --改写[dbo].[fGetPy],允许字母/数字联想
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(@n) else @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 @chn) as a
order by chn COLLATE Chinese_PRC_CI_AS
) as b
else set @c=@chn --英文/数字的字母保持不变
set @return=@return+@c
end
return(@return)
end
go

 

posted @ 2012-02-15 17:48  大明1986  阅读(361)  评论(0编辑  收藏  举报