如何獲取字符串(形式爲「%[text]%」)和數據庫列的任意列表,然後將它們轉換爲SQL查詢,以執行LIKE比較列表中的每個字符串?從字符串列表構建查詢
舉例:我的列表中有三個字符串,「%bc%」,「%def%」和「%ab%」。這建立了查詢:
([ColumnName] LIKE "%bc" AND [ColumnName] LIKE "%def%") AND [ColumnName] LIKE "%ab%"
一個C#示例將非常棒,但隨意用您選擇的語言編寫它。
如何獲取字符串(形式爲「%[text]%」)和數據庫列的任意列表,然後將它們轉換爲SQL查詢,以執行LIKE比較列表中的每個字符串?從字符串列表構建查詢
舉例:我的列表中有三個字符串,「%bc%」,「%def%」和「%ab%」。這建立了查詢:
([ColumnName] LIKE "%bc" AND [ColumnName] LIKE "%def%") AND [ColumnName] LIKE "%ab%"
一個C#示例將非常棒,但隨意用您選擇的語言編寫它。
這是一個地圖上只是一個字符串連接:
>>> los=['ab', 'cd', 'ef']
>>> ' and '.join(("somecolumn like '%%%s%%'" % s) for s in los)
"somecolumn like '%ab%' and somecolumn like '%cd%' and somecolumn like '%ef%'"
或
>>> ' and '.join(("somecolumn like '%" + s + "%'") for s in los)
"somecolumn like '%ab%' and somecolumn like '%cd%' and somecolumn like '%ef%'"
我使用StringBuilder和for循環。假設你的列表被稱爲「單子」,是一個列表:
StringBuilder sql = new StringBuilder();
if (list.Count > 0)
sql.AppendFormat(CultureInfo.InvariantCulture, "([{0}] LIKE \"{1}\"", columnName, list[0]);
for (int i = 1; i < list.Count; i++)
{
sql.AppendFormat(CultureInfo.InvariantCulture, " AND [{0}] LIKE \"{1}\"", columnName, list[i]);
}
if (list.Count > 0)
sql.Append(")");
直接回答你的問題,
string.join(" and ",
(new[] { "%bc%", "%def%", "%ab%" })
.Select(x => string.Format("[{0}] LIKE '{1}'",columnName, x))
.ToArray());
解決您的問題,您應該使用SQL Server全文檢索工具。查詢將是:
select * from table
where FREETEXT("bc def ab")
有了正確的指標,這應該勝過喜歡的列表
可悲的是,這是對於要帶輸入SQL語句的形式的東西,而不是一個實際的數據庫。 – Merus 2008-11-25 23:48:21