C#拼音首字母的模糊查询,有大神知道么?请教下 非常感谢

 我来答
若以下回答无法解决问题,邀请你更新回答
声鸾U1
推荐于2016-12-02 · TA获得超过651个赞
知道小有建树答主
回答量:1195
采纳率:33%
帮助的人:509万
展开全部
 
    /// <summary>
    /// 根据汉字获得拼音
    /// </summary>
    public class BLL_GetEnSpell
    {
        /// <summary>
        /// 根据给的汉字获得起首拼音字母
        /// </summary>
        /// <param name="strText"></param>
        /// <returns></returns>
        public string GetChineseSpell( string strText )
        {
           //获得汉字数目
            int len = strText.Length;
            string myStr = "";
            for ( int i = 0; i < len; i++ )
            {
            //保存 <---- 调用方法取得字母 <----先取已个汉字
                myStr += this.getSpell(strText.Substring(i, 1));
            }
            return myStr;
        }
  /// <summary>
  /// 根据一个汉字获得其首拼音
  /// </summary>
  /// <param name="cnChar"></param>
  /// <returns></returns>
        private string getSpell( string cnChar )
        {
   //获得其ASSIC码
            byte [] arrCN = Encoding.Default.GetBytes(cnChar);
            if ( arrCN.Length > 1 )
            {
                int area = ( short ) arrCN [0];
                int pos = ( short ) arrCN [1];

                //int code = (area << 8) + pos;
                int code = area * 256 + pos;
                //0~65535
                //a~Z的数字表示
                int [] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 
                    47297, 47614, 48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481 };
    //判断其值在那2个数字之间
                for ( int i = 0; i < 26; i++ )
                {
                    //最后一个汉字的值
                    int max = 55290;
                    if ( i != 25 )
                        max = areacode [i + 1];
                    if ( areacode [i] <= code && code < max )
                    {
      //转为字母返回
                        return Encoding.Default.GetString(new byte [] { ( byte ) ( 97 + i ) });
                    }
                }
                return "*";
            }
            else return cnChar;
        }
    }
这是获得汉字拼音的方法,

楼上说的不错,如果你数据库中不保存拼音就不能直接查询,当然有变通的办法,只是多几个步骤,如果数据量大的话还是建议你在表中加个拼音列

更多追问追答
追问
我能把汉字转为拼音,之后怎么做我就不知道了
追答
你用到数据库了没?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1804438115
高粉答主

2013-08-16 · 醉心答题,欢迎关注
知道大有可为答主
回答量:1.1万
采纳率:61%
帮助的人:3759万
展开全部
select * from ceshibiao where 列名 like '%1231231%'
这就是模糊查询,你可以根据自己写的进行改变

在进行数据库查询时,有完整查询和模糊查询之分。

一般模糊查询语句如下:

SELECT 字段 FROM 表 WHERE 某字段 Like 条件

其中关于条件,SQL提供了四种匹配模式:

1,% :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'

将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'

若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

2,_ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:

比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;

再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出“三脚猫”这样name为三个字且第一个字是“三”的;

3,[ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'
将找出“张三”、“李三”、“王三”(而不是“张李王三”);

如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
将找出“老1”、“老2”、……、“老9”;

4,[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'
将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;

SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
将排除“老1”到“老4”,寻找“老5”、“老6”、……

希望我的回答对你有帮助
追问
我要的是 输入拼音 能查出数据库的汉字。。。。。
追答
你数据库中没有拼音的话,是不能输入拼音转汉字,你可以再数据库列中增加拼音列,这样在数据拼音的时候,才能准确查找到汉字啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式