이름 병음 이니셜에 따라 빠른 조회

17643 단어 조회
if exists (select * from sysobjects where id = object_id(N'[fn_ChineseToSpell]') and xtype in (N'FN', N'IF', N'TF'))

    drop function [fn_ChineseToSpell]

GO

/* */ 

create function [dbo].[fn_ChineseToSpell](@strChinese varchar(500)='') 

returns varchar(500) 

as 

begin /* */ 

    declare @strLen int,@return varchar(500),@i int 

    declare @n int,@c char(1),@chn nchar(1)  

    select @strLen=len(@strChinese),@return='',@i=0 

    while @i<@strLen 

    begin /*while */

            select @i=@i+1,@n=63,@chn=substring(@strChinese,@i,1) 

            if @chn>'z'/* :“ ASCII ”*/                

                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 /*while */  

    return(@return)  

end /* */

--

select name from hanzi_pinyin where dbo.[fn_ChineseToSpell](name) LIKE 'Ys%'







-- 

create table hanzi_pinyin

(

    name nvarchar(50)

)

insert hanzi_pinyin values(N' ')

insert hanzi_pinyin values(N' ')

insert hanzi_pinyin values(N' ')

insert hanzi_pinyin values(N' ')

insert hanzi_pinyin values(N' ')

insert hanzi_pinyin values(N' ')

insert hanzi_pinyin values(N' ')

insert hanzi_pinyin values(N' ')

(글 출처: http://www.cnblogs.com/sydeveloper )

좋은 웹페이지 즐겨찾기