呵呵,楼上的,你可以找找将汉字转拼音的方法也行呀!反正我找不到!这是我在mysql下的百家姓的表,都是取第一个字母,来搜索,+-----------+-------------+
| FristName | FristLetter |
+-----------+-------------+
| 艾        | A           |
| 安        | A           |
| 白        | B           |
| 包        | B           |
| 鲍        | B           |
| 毕        | B           |
| 卞        | B           |
| 卜        | B           |
| 尉迟      | C           |
| 淳于      | C           |
| 蔡        | C           |
| 曹        | C           |
| 柴        | C           |
| 常        | C           |
| 晁        | C           |
| 车        | C           |
| 陈        | C           |
| 程        | C           |
| 褚        | C           |
| 储        | C           |
| 宗        | C           |
| 从        | C           |
| 仲        | C           |
| 崔        | C           |
| 东方      | D           |
| 戴        | D           |

解决方案 »

  1.   

    适用可行的办法
    加个字段samplename,存储每条记录的姓名字段的拼音简化,查询时查该字段就性了
    如select * from 表 where samplename=条件
      

  2.   

    package web.util;public class Letter {
      private static String _FromEncode_ = "GBK";
      private static String _ToEncode_ = "GBK";
      public  Letter() {
      }  public static int compare(String str1,String str2){
        int result =0;
        String m_s1 = null,m_s2 = null;
        try {
          m_s1 = new String(str1.getBytes(_FromEncode_),_ToEncode_);
          m_s2 = new String(str2.getBytes(_FromEncode_),_ToEncode_);
        } catch(Exception e){
          return str1.compareTo(str2);
        }
        result = chineseCompareTo(m_s1,m_s2);
        return result;
      }  public  static int getCharCode(String s){
        if (s == null && s.equals(""))
          return -1;
        byte[] b = s.getBytes();
        int value = 0;
        for (int i = 0; i < b.length && i <= 2; i++){
          value = value*100 + b[i]; //*100左移
        }
        return value;
      }  public static int chineseCompareTo(String s1, String s2) {
        int len1 = s1.length();
        int len2 = s2.length();
        int n = Math.min(len1, len2);
        for (int i = 0; i < n; i++) {
          int s1_code = getCharCode(s1.charAt(i) + "");
          int s2_code = getCharCode(s2.charAt(i) + "");
          if (s1_code*s2_code<0)
            return Math.min(s1_code,s2_code);
          if (s1_code != s2_code)
            return s1_code - s2_code;
        }
        return len1 - len2;
      }
      public static String getBeginCharacter(String res) {
        String a = res;
        String result = "";
        String current;    for(int i=0;i<a.length();i++){
          current = a.substring(i,i+1);
          if (Letter.compare(current,"啊")<0 ) //字母,数字原样返回
            result += current;
          else if ((Letter.compare(current, "啊")>=0) && (Letter.compare(current,"座")) <= 0){
            if (Letter.compare(current,"匝") >= 0)
              result += "z";
            else if (Letter.compare(current,"压") >=0)
              result += "y";
            else if (Letter.compare(current,"昔") >=0)
              result += "x";
            else if (Letter.compare(current,"挖") >=0)
              result += "w";
            else if (Letter.compare(current,"塌") >=0)
              result += "t";
            else if (Letter.compare(current,"撒") >=0)
              result += "s";
            else if (Letter.compare(current,"然") >=0)
              result += "r";
            else if (Letter.compare(current,"期") >=0)
              result += "q";
            else if (Letter.compare(current,"啪") >=0)
              result += "p";
            else if (Letter.compare(current,"哦") >=0)
              result += "o";
            else if (Letter.compare(current,"拿") >=0)
              result += "n";
            else if (Letter.compare(current,"妈") >=0)
              result += "m";
            else if (Letter.compare(current,"垃") >=0)
              result += "l";
            else if (Letter.compare(current,"喀") >=0)
              result += "k";
            else if (Letter.compare(current,"击") >0)
              result += "j";
            else if (Letter.compare(current,"哈") >=0)
              result += "h";
            else if (Letter.compare(current,"噶") >=0)
              result += "g";
            else if (Letter.compare(current,"发") >=0)
              result += "f";
            else if (Letter.compare(current,"蛾") >=0)
              result += "e";
            else if (Letter.compare(current,"搭") >=0)
              result += "d";
            else if (Letter.compare(current,"擦") >=0)
              result += "c";
            else if (Letter.compare(current,"芭") >=0)
              result += "b";
            else if (Letter.compare(current,"啊") >=0)
              result += "a";
          }
        }
        return result.toUpperCase();
      }
      
      public static void main(String[] args){
       Letter lt=new Letter();
       if(lt.getBeginCharacter("测试").Equals("CS"))System.out.println("Successed!");
      }}
      

  3.   

    to shaopin(shaopin) :
       我对你这段代码很感兴趣,不知道你这段代码能否实现下面这个网站的样子。或者说你用这段代码做过什么样的东西?谢谢!http://www.cnad365.net/card/py.asp
      

  4.   

    楼上的代码好象只能应付GB2312,对GBK不行,还有多音字怎么办?
      

  5.   

    这个帖子挺好的!!!
    好帖要人顶!
    我还想借助楼主的帖子想问问,如何做一个辅助录入的web组件:
    比如我现在要对某商品号录入是点机按狃就可以把相应的对应关系显示在javascript上
      

  6.   

    Delphi下的:
    // 获取指定汉字的拼音索引字母,如:“汉”的索引字母是“H”
    function GetPYIndexChar( hzchar:string):char;
    begin
      case WORD(hzchar[1]) shl 8 + WORD(hzchar[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..$D188 : result := 'X';
        $D1B9..$D4D0 : result := 'Y';
        $D4D1..$D7F9 : result := 'Z';
      else
        result := char(32);
      end;
    end;procedure TMainForm.btnConvertClick(Sender: TObject);
    var
      I: Integer;
      PY: string;
      s: string;
    begin
      s := '' ;
      I := 1;
      while I <= Length(ChineseEdt.Text) do
      begin
        PY := Copy(ChineseEdt.Text, I , 1);
        if PY >= Chr(128) then
        begin
          Inc(I);
          PY := PY + Copy(ChineseEdt.Text, I , 1);
          s := s + GetPYIndexChar(PY);
        end
        else
          s := s + PY;
        Inc(I);
      end;
      PYEdt.Text := s;
    end;
      

  7.   

    to Bluecatr(蓝夜猫儿):
       我找的这个类是取汉字的拼音首字母的,我用它来做检索。就是在查询中,用户输入汉字比较麻烦,通过输入拼音首字母来检索记录,这样会比较方便。
      我不知道你检索百家姓用这个会不会有性能上的影响。做应该可以
      
      

  8.   

    呵呵,兄台,你这段代码是你自己写的吗?
    哈哈,俺还是比较自豪啊,csdn上也有人引用我的代码。不过建议大家以后引用别人的东西的时候,最好说一下。咱中国人咋这样呢?大道大学教授,科学家抄袭,小到再程序员这样。
    package web.util;public class Letter {
      private static String _FromEncode_ = "GBK";
      private static String _ToEncode_ = "GBK";
      public  Letter() {
      }  public static int compare(String str1,String str2){
        int result =0;
        String m_s1 = null,m_s2 = null;
        try {
          m_s1 = new String(str1.getBytes(_FromEncode_),_ToEncode_);
          m_s2 = new String(str2.getBytes(_FromEncode_),_ToEncode_);
        } catch(Exception e){
          return str1.compareTo(str2);
        }
        result = chineseCompareTo(m_s1,m_s2);
        return result;
      }  public  static int getCharCode(String s){
        if (s == null && s.equals(""))
          return -1;
        byte[] b = s.getBytes();
        int value = 0;
        for (int i = 0; i < b.length && i <= 2; i++){
          value = value*100 + b[i]; //*100左移
        }
        return value;
      }  public static int chineseCompareTo(String s1, String s2) {
        int len1 = s1.length();
        int len2 = s2.length();
        int n = Math.min(len1, len2);
        for (int i = 0; i < n; i++) {
          int s1_code = getCharCode(s1.charAt(i) + "");
          int s2_code = getCharCode(s2.charAt(i) + "");
          if (s1_code*s2_code<0)
            return Math.min(s1_code,s2_code);
          if (s1_code != s2_code)
            return s1_code - s2_code;
        }
        return len1 - len2;
      }
      public static String getBeginCharacter(String res) {
        String a = res;
        String result = "";
        String current;    for(int i=0;i<a.length();i++){
          current = a.substring(i,i+1);
          if (Letter.compare(current,"啊")<0 ) //字母,数字原样返回
            result += current;
          else if ((Letter.compare(current, "啊")>=0) && (Letter.compare(current,"座")) <= 0){
            if (Letter.compare(current,"匝") >= 0)
              result += "z";
            else if (Letter.compare(current,"压") >=0)
              result += "y";
            else if (Letter.compare(current,"昔") >=0)
              result += "x";
            else if (Letter.compare(current,"挖") >=0)
              result += "w";
            else if (Letter.compare(current,"塌") >=0)
              result += "t";
            else if (Letter.compare(current,"撒") >=0)
              result += "s";
            else if (Letter.compare(current,"然") >=0)
              result += "r";
            else if (Letter.compare(current,"期") >=0)
              result += "q";
            else if (Letter.compare(current,"啪") >=0)
              result += "p";
            else if (Letter.compare(current,"哦") >=0)
              result += "o";
            else if (Letter.compare(current,"拿") >=0)
              result += "n";
            else if (Letter.compare(current,"妈") >=0)
              result += "m";
            else if (Letter.compare(current,"垃") >=0)
              result += "l";
            else if (Letter.compare(current,"喀") >=0)
              result += "k";
            else if (Letter.compare(current,"击") >0)
              result += "j";
            else if (Letter.compare(current,"哈") >=0)
              result += "h";
            else if (Letter.compare(current,"噶") >=0)
              result += "g";
            else if (Letter.compare(current,"发") >=0)
              result += "f";
            else if (Letter.compare(current,"蛾") >=0)
              result += "e";
            else if (Letter.compare(current,"搭") >=0)
              result += "d";
            else if (Letter.compare(current,"擦") >=0)
              result += "c";
            else if (Letter.compare(current,"芭") >=0)
              result += "b";
            else if (Letter.compare(current,"啊") >=0)
              result += "a";
          }
        }
        return result.toUpperCase();
      }
      
      public static void main(String[] args){
       Letter lt=new Letter();
       if(lt.getBeginCharacter("测试").Equals("CS"))System.out.println("Successed!");
      }}
      

  9.   

    -在你的数据库中创建下面的函数.  
     
    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='a'  
                           set  @return=@return+@c  
               end  
               return(@return)  
    end  
     
    go  
    --测试  
    select  dbo.fgetpy('东莞市')  as  东莞市,dbo.fgetpy('ab中c国人')  as  中国人  
     
    --删除拼音函数  
    drop  function  fgetpy  
     
     
      回复人:zjcxc(: 邹建 :) () 信誉:280  2004-3-14 22:04:41  删除  
     
      --然后你就可以利用上面的函数来实现你的查询要求了.  
     
    select  *  from    表  where  dbo.fgetpy(字段)='CXYDBY'
      

  10.   

    to zhang21cnboy(事了抚衣去,不留身与名):
    -----------------------------------------  
    呵呵,兄台,你这段代码是你自己写的吗?"
    -----------------------------------------  
    你看到别人说过“我找的这个类.....”没有,别人是在帮助人,而且又没有说是自己写的,只是少了你的大名而已,有必要发表那么多的感慨吗!!有那么多时间和精力好好帮帮别人,帮帮中国的程序员都像你那么牛,那时你再大大的牛B吧!!!
      

  11.   

    TO: AaDMP123(风中之音) ,是使用PLSQL吗?我对这方面不是太熟悉,用Access和Mysql可以吗?