相信所有的軟件開發者都做過頁面上的查詢功能,而且很多都需要既支持模糊查詢的,也需要支持精准查詢的,而且不需要增加多余的功能,只需要在文本框中輸入包含類似*之類的符號即可。
下面的方法就是通過*來判斷到底是模糊查詢還是精准查詢,方法如下:
/// <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中的函數稍加修改即可。