在SQL Server中查找前1个最匹配的字符串

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 在这里.