2008-11-25 4 views
0

Как вы производите произвольный список строк (формы «% [текст]%») и столбца базы данных и превращаете их в SQL-запрос, который выполняет сравнение LIKE для каждая строка в списке?Создание запроса из списка строк

Пример: У меня есть три строки в моем списке: «% bc%», «% def%» и «% ab%». Это создает запрос:

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

A 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 и для цикла. Предполагая, что ваш список называется «список» и является список:


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

Смежные вопросы