日期:2014-05-18 浏览次数:20643 次
--创建取汉字首字母函数(第三版) create function [dbo].[f_getpy_V3] ( @Str varchar(500)='' ) returns varchar(500) as begin declare @i int set @i=1 while (@i<10) begin set @str=replace(@str,ltrim(@i),substring('一二三四五六七八九',@i,1)) set @i=@i+1 end 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='a' set @return=@return+@c end return(@return) end declare @T table (中文名称 varchar(10),拼音简称 varchar(6)) insert into @T select '中国移动','ZGYY' union all select '11中国移动','YYZGYD' union all select '12中国电信','YYZGDX' union all select '中国电信','ZGDX' select *,正确简称= [dbo].[f_getpy_V3](中文名称) from @T /* 中文名称 拼音简称 正确简称 ---------- ------ -------------------- 中国移动 ZGYY ZGYD 11中国移动 YYZGYD YYZGYD 12中国电信 YYZGDX YEZGDX 中国电信 ZGDX ZGDX */