2008-11-25 107 views
0

如何獲取字符串(形式爲「%[text]%」)和數據庫列的任意列表,然後將它們轉換爲SQL查詢,以執行LIKE比較列表中的每個字符串?從字符串列表構建查詢

舉例:我的列表中有三個字符串,「%bc%」,「%def%」和「%ab%」。這建立了查詢:

([ColumnName] LIKE "%bc" AND [ColumnName] LIKE "%def%") AND [ColumnName] LIKE "%ab%" 

一個C#示例將非常棒,但隨意用您選擇的語言編寫它。

回答

0

這是一個地圖上只是一個字符串連接:

>>> 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%'" 
0

我使用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(")"); 
2

直接回答你的問題,

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") 

有了正確的指標,這應該勝過喜歡的列表

+0

可悲的是,這是對於要帶輸入SQL語句的形式的東西,而不是一個實際的數據庫。 – Merus 2008-11-25 23:48:21