我有一个表' 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。但它应该只返回第二行(最大匹配)。
我只是不需要针对此方案的解决方案。这只是一个例子。我需要一个像选择最佳匹配的解决方案。有什么想法吗?
答案 0 :(得分:6)
尝试:
Select top 1 * from MyTable
where @Parameters_Built like Expression
order by len(Expression)-len(replace(Expression,'%',''))
- 按照表达式中非%
个字符的数量对结果进行排序。
SQLFiddle here。