Max*_*mus 1 sql string sql-server-2005 sql-like
我有一个表' MyTable ',它有一些商业逻辑.此表有一个名为Expression的列,其中包含使用其他列构建的字符串.我的疑问是
Select Value from MyTable where @Parameters_Built like Expression
Run Code Online (Sandbox Code Playgroud)
变量@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|
---------------------
Run Code Online (Sandbox Code Playgroud)
所以我的上面的查询对于所有三行都返回true.但它应该只返回第二行(最大匹配).
我只是不需要针对此方案的修复解决方案.这只是一个例子.我需要一个像选择最佳匹配的解决方案.任何的想法?
小智 6
尝试:
Select top 1 * from MyTable
where @Parameters_Built like Expression
order by len(Expression)-len(replace(Expression,'%',''))
Run Code Online (Sandbox Code Playgroud)
- 这会根据%表达式中的非字符数对结果进行排序.
SQLFiddle 在这里.