根据大力的贴子改成.将大力的两个函数合并成了一个函数.  
        可以应用于助记码的查询  
  --转载(最早见于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(@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  
  --测试  
  select   dbo.fgetpy('东莞市')   as   东莞市,dbo.fgetpy('ab中c国人')   as   中国人  
   
  --删除拼音函数  
  drop   function   fgetpy

 

select   name,value,dbo.fun_getPY(left(name,1))   as   pinyin  
  from   a

create   view   v_a  
  as  
  select   name,value,dbo.fun_getPY(left(name,1))   as   pinyin  
  from   a

posted on 2008-02-25 13:33  goooto  阅读(174)  评论(0编辑  收藏  举报