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|
---------------------

したがって、上記のクエリは 3 つの行すべてに対して true を返します。ただし、2 行目 (最大一致) のみを返す必要があります。

このシナリオの修正を含むソリューションは必要ありません。これはほんの一例です。ベストマッチを選ぶような解決策が必要です。何か案が?

4

1 に答える 1

6

試す:

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

%- これは、expression 内の非文字の数によって結果を並べ替えます。

ここでSQLFiddle 。

于 2013-04-30T07:22:41.557 に答える