1

我有一个表' MyTable ',它有一些业务逻辑。该表有一个名为Expression的列,其中包含使用其他列构建的字符串。我的查询是

Select Value from MyTable where @Parameters_Built like Expression

变量@Parameters_Built 是通过将所有输入参数连接在一起而构建的。

在我目前的情况下,

@Parameteres_Built='1|2|Computer IT/Game Design & Dev (BS)|0|1011A|1|0|'

Below are the expressions
---------------------
%%|%%|%%|0|%%|%%|0|
---------------------
1|2|%%|0|%%|%%|0|
---------------------
1|%%|%%|0|%%|%%|0|
---------------------

所以我上面的查询对所有三行都返回 true。但它应该只返回第二行(最大匹配)。

我只是不需要解决这种情况的解决方案。这只是一个例子。我需要一个解决方案,比如选择最佳匹配。任何想法?

4

1 回答 1

6

尝试:

Select top 1 * from MyTable 
where @Parameters_Built like Expression
order by len(Expression)-len(replace(Expression,'%',''))

- 这将按表达式中的非%字符数对结果进行排序。

SQLFiddle在这里

于 2013-04-30T07:22:41.557 回答