0

您将如何获取任意字符串列表(形式为“%[text]%”)和数据库列,并将它们转换为对列表中的每个字符串进行 LIKE 比较的 SQL 查询?

一个例子:我的列表中有三个字符串,“%bc%”、“%def%”和“%ab%”。这将构建查询:

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

AC# 示例非常好,但您可以随意用您选择的语言编写它。

4

3 回答 3

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

使用正确的索引,这应该优于 LIKE 列表

于 2008-11-25T23:30:47.023 回答
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%'"
于 2008-11-25T23:20:53.033 回答
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(")");
于 2008-11-25T23:23:51.513 回答