如何实现按拼音首字查询数据库?
比如:sql server2000下有张工资表,内有姓名、工资等字段如何做到,输入“张三”的首字拼音的“zs”即可找到所有拼音为“zs”开头的?如何做?我知道要建个拼音的字段,可是怎么建??不要告诉我要一条一条自己写。我有1500条记录,已经现成在那里了,

解决方案 »

  1.   

    http://www.2ccc.com/article.asp?articleid=1314
    使用这个组件,使用前你还是得写一些代码将以前的姓名转成拼音简写,要加字段啊。然后再通过SQL查询,不难吧。
      

  2.   

    取汉字的拼音首字母:function GetEn(CnString: string): string;
      function GetEnChar(cnchar: string): char;
      begin
        case Word(cnchar[1]) shl 8 + Word(cnchar[2]) of
          $B0A1..$B0C4: result := 'a';
          $B0C5..$B2C0: result := 'b';
          $B2C1..$B4ED: result := 'c';
          $B4EE..$B6E9: result := 'd';
          $B6EA..$B7A1: result := 'e';
          $B7A2..$B8C0: result := 'f';
          $B8C1..$B9FD: result := 'g';
          $B9FE..$BBF6: result := 'h';
          $BBF7..$BFA5: result := 'j';
          $BFA6..$C0AB: result := 'k';
          $C0AC..$C2E7: result := 'l';
          $C2E8..$C4C2: result := 'm';
          $C4C3..$C5B5: result := 'n';
          $C5B6..$C5BD: result := 'o';
          $C5BE..$C6D9: result := 'p';
          $C6DA..$C8BA: result := 'q';
          $C8BB..$C8F5: result := 'r';
          $C8F6..$CBF9: result := 's';
          $CBFA..$CDD9: result := 't';
          $CDDA..$CEF3: result := 'w';
          $CEF4..$D1B8: result := 'x';
          $D1B9..$D4D0: result := 'y';
          $D4D1..$D7F9: result := 'z';
        else
          result := char(0);
        end;
      end;
    var
      i, len: integer;
    begin
      CnString := StringReplace(CnString, ' ', '', [rfReplaceAll]);  //删除空格
      len := Length(CnString) - Length(WideString(CnString));        //汉字个数
      for i := 1 to len do
        result := result + GetEnChar(copy(CnString, 2*i-1, 2));
    end;
      

  3.   

    数据库里加入拼音码字段
    查询时使用Like语句
      

  4.   

    function GetEn(CnString: string): string;
      function GetEnChar(cnchar: string): char;
      begin
        case Word(cnchar[1]) shl 8 + Word(cnchar[2]) of
          $B0A1..$B0C4: result := 'a';
          $B0C5..$B2C0: result := 'b';
          $B2C1..$B4ED: result := 'c';
          $B4EE..$B6E9: result := 'd';
          $B6EA..$B7A1: result := 'e';
          $B7A2..$B8C0: result := 'f';
          $B8C1..$B9FD: result := 'g';
          $B9FE..$BBF6: result := 'h';
          $BBF7..$BFA5: result := 'j';
          $BFA6..$C0AB: result := 'k';
          $C0AC..$C2E7: result := 'l';
          $C2E8..$C4C2: result := 'm';
          $C4C3..$C5B5: result := 'n';
          $C5B6..$C5BD: result := 'o';
          $C5BE..$C6D9: result := 'p';
          $C6DA..$C8BA: result := 'q';
          $C8BB..$C8F5: result := 'r';
          $C8F6..$CBF9: result := 's';
          $CBFA..$CDD9: result := 't';
          $CDDA..$CEF3: result := 'w';
          $CEF4..$D1B8: result := 'x';
          $D1B9..$D4D0: result := 'y';
          $D4D1..$D7F9: result := 'z';
        else
          result := char(0);
        end;
      end;
    proedure Editchange(sender:Tobject);
    var 
    i:integer;
    hz:string;
    begin
    Edit2.tex :='';
    for i:= i to length(edit1.text)div 2 do
    begin
    hz:=copy(edit1.text,I*2 -1 ,2);
    edit2.text := edit2.txt + getpy(hy);end;
    end;对于查询,做个模糊查询就可以了