如何将姓名列中的姓名,转化为拼音码,是按拼音码查询
--------------------------------
比如一个表格,里面有员工编号,员工姓名,
操作员感到用编号查找不方便,因为员工编号谁也背不下来,用姓名查找,要输入汉字,也不方便,所以想按照姓名的拼音码查找,
我不知如何办,
1.汉字如何转为拼音吗?
2.是不是要增加一个拼音码字段呀,把所有姓名的拼音码全部录进去.还是根据拼音码自动匹配汉字呀?

解决方案 »

  1.   


    --转帖   
      --可支持大字符集20000个汉字!   
        
      create   function   f_ch2py(@chn   nchar(1))   
      returns   char(1)   
      as   
      begin   
      declare   @n   int   
      declare   @c   char(1)   
      set   @n   =   63   
        
      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   
      '丌'   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   @chn)   as   a   
      order   by   chn   COLLATE   Chinese_PRC_CI_AS     
      )   as   b   
      return(@c)   
      end   
      go   
        
      select   dbo.f_ch2py('中')     --Z   
      select   dbo.f_ch2py('国')     --G   
      select   dbo.f_ch2py('人')     --R   
      select   dbo.f_ch2py('镆')     --M   
      go   
      -----------------调用   
      CREATE   FUNCTION   F_GetHelpCode   (   
      @cName   VARCHAR(20)   )   
      RETURNS   VARCHAR(12)   
      AS   
      BEGIN   
            DECLARE   @i   SMALLINT,   @L   SMALLINT   ,   @cHelpCode   VARCHAR(12),   @e   VARCHAR(12),   @iAscii   SMALLINT   
            SELECT   @i=1,   @L=0   ,   @cHelpCode=''   
            while   @L<=12   AND   @i<=LEN(@cName)   BEGIN   
                  SELECT   @e=LOWER(SUBSTRING(@cname,@i,1))   
                  SELECT   @iAscii=ASCII(@e)   
                  IF   @iAscii>=48   AND   @iAscii   <=57   OR   @iAscii>=97   AND   @iAscii   <=122   or   @iAscii=95     
                    SELECT   @cHelpCode=@cHelpCode     +@e   
                  ELSE   
                  IF   @iAscii>=176   AND   @iAscii   <=247   
                              SELECT   @cHelpCode=@cHelpCode     +   dbo.f_ch2py(@e)   
                      ELSE   SELECT   @L=@L-1   
                  SELECT   @i=@i+1,   @L=@L+1   END     
              RETURN   @cHelpCode   
      END   
      GO   
        
      --调用   
      select   dbo.F_GetHelpCode('大力')
      

  2.   

    --1. 按拼音排序
    DECLARE @t TABLE(col varchar(2))
    INSERT @t SELECT '中'
    UNION ALL SELECT '国'
    UNION ALL SELECT '人'SELECT * FROM @t ORDER BY col COLLATE Chinese_PRC_CS_AS_KS_WS
    /*--结果
    col  
    ---- 



    --*/
    GO
    /*==========================================*/
    --2. 汉字首字母查询处理用户定义函数
    CREATE FUNCTION f_GetPY(@str nvarchar(4000))
    RETURNS nvarchar(4000)
    AS
    BEGIN
    DECLARE @py TABLE(
    ch char(1),
    hz1 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS,
    hz2 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS)
    INSERT @py SELECT 'A',N'吖',N'鏊'
    UNION  ALL SELECT 'B',N'八',N'簿'
    UNION  ALL SELECT 'C',N'嚓',N'错'
    UNION  ALL SELECT 'D',N'哒',N'跺'
    UNION  ALL SELECT 'E',N'屙',N'贰'
    UNION  ALL SELECT 'F',N'发',N'馥'
    UNION  ALL SELECT 'G',N'旮',N'过'
    UNION  ALL SELECT 'H',N'铪',N'蠖'
    UNION  ALL SELECT 'J',N'丌',N'竣'
    UNION  ALL SELECT 'K',N'咔',N'廓'
    UNION  ALL SELECT 'L',N'垃',N'雒'
    UNION  ALL SELECT 'M',N'妈',N'穆'
    UNION  ALL SELECT 'N',N'拿',N'糯'
    UNION  ALL SELECT 'O',N'噢',N'沤'
    UNION  ALL SELECT 'P',N'趴',N'曝'
    UNION  ALL SELECT 'Q',N'七',N'群'
    UNION  ALL SELECT 'R',N'蚺',N'箬'
    UNION  ALL SELECT 'S',N'仨',N'锁'
    UNION  ALL SELECT 'T',N'他',N'箨'
    UNION  ALL SELECT 'W',N'哇',N'鋈'
    UNION  ALL SELECT 'X',N'夕',N'蕈'
    UNION  ALL SELECT 'Y',N'丫',N'蕴'
    UNION  ALL SELECT 'Z',N'匝',N'做'
    DECLARE @i int
    SET @i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
    WHILE @i>0
    SELECT @str=REPLACE(@str,SUBSTRING(@str,@i,1),ch)
    ,@i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
    FROM @py
    WHERE SUBSTRING(@str,@i,1) BETWEEN hz1 AND hz2
    RETURN(@str)
    END
    GO