C#拼音首字母的模糊查询,有大神知道么?请教下 非常感谢
若以下回答无法解决问题,邀请你更新回答
2个回答
展开全部
/// <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;
}
}
这是获得汉字拼音的方法,
楼上说的不错,如果你数据库中不保存拼音就不能直接查询,当然有变通的办法,只是多几个步骤,如果数据量大的话还是建议你在表中加个拼音列
更多追问追答
追问
我能把汉字转为拼音,之后怎么做我就不知道了
追答
你用到数据库了没?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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”、……
希望我的回答对你有帮助
这就是模糊查询,你可以根据自己写的进行改变
在进行数据库查询时,有完整查询和模糊查询之分。
一般模糊查询语句如下:
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”、……
希望我的回答对你有帮助
追问
我要的是 输入拼音 能查出数据库的汉字。。。。。
追答
你数据库中没有拼音的话,是不能输入拼音转汉字,你可以再数据库列中增加拼音列,这样在数据拼音的时候,才能准确查找到汉字啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询