支持Oracle的模糊查询和精准查询
相信所有的软件开发者都做过页面上的查询功能,而且很多都需要既支持模糊查询的,也需要支持精准查询的,而且不需要增加多余的功能,只需要在文本框中输入包含类似*之类的符号即可。
下面的方法就是通过*来判断到底是模糊查询还是精准查询,方法如下:
/// <summary> /// 通过输入文本和字段名称来组织返回的查询字符串 /// </summary> /// <param name="query_name">input string</param> /// <param name="query_field">query field</param> /// <returns></returns> public string QueryString_By_QueryType(string query_name, string query_field) { string query_string = string.Empty; //replace consecutive star siginal to be one star siginal, eg. '***' = '*' query_name = Regex.Replace(query_name, @"\*{1,}", "*"); //Split the condition to be a Array string[] conditionList = query_name.Split('*').Where(A=>!string.IsNullOrEmpty(A)).ToArray(); if (conditionList.Length == 1) { if (!string.IsNullOrEmpty(query_string)) { query_string += " AND "; } if (!query_name.Contains('*')) { query_string += query_field + " = '" + conditionList[0] + "'"; } else { if (query_name.StartsWith("*")) { query_string = query_field + " LIKE '" + query_name.Replace('*', '%') + "'"; } if (!string.IsNullOrEmpty(query_string)) { query_string += " AND "; } if (query_name.EndsWith("*")) { query_string += query_field + " LIKE '" + query_name.Replace('*', '%') + "'"; } } } else if (conditionList.Length > 1) { foreach (var condition in conditionList) { if (!string.IsNullOrEmpty(query_string)) { query_string += " AND "; } query_string += "INSTR(" + query_field + ", '" + condition + "', -1) > 0"; } for (int i = 1; i < conditionList.Length; i++) { if (i < conditionList.Length) { if (!string.IsNullOrEmpty(query_string)) { query_string += " AND "; } query_string += "INSTR(" + query_field + ",'" + conditionList[i - 1] + "', -1) < INSTR(" + query_field + ",'" + conditionList[i] + "', -1)"; } } } return query_string; }
调用的时候只需要传入文本和字段名称即可,程序会根据*来判断到底该如何去组织查询语句。
此方法只支持Oracle的查询,如果想要此方法支持SqlServer的查询,只需要把Oracle中的函数稍加修改即可。