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

时间:2013-04-30 07:10:26

标签: sql string sql-server-2005 sql-like

我有一个表' 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。但它应该只返回第二行(最大匹配)。

我只是不需要针对此方案的解决方案。这只是一个例子。我需要一个像选择最佳匹配的解决方案。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

尝试:

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

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

SQLFiddle here