0

文字列の任意のリスト ("%[text]%" の形式) とデータベース列を取得し、それらをリスト内の各文字列に対して LIKE 比較を行う SQL クエリに変換するにはどうすればよいでしょうか?

例: リストに「%bc%」、「%def%」、「%ab%」の 3 つの文字列があります。これにより、クエリが構築されます。

([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 に答える