2012-04-02 17 views
0

私のテーブルには、基本的に10進値のコードがあります。私は、検索条件のSQLクエリ

  • ユーザーが0010を検索した場合:例えば、コード列は001.000.10002.000.20などのようなデータは、私はUIからコード値を検索しながら、以下の結果を示しているSQLクエリを記述する必要が含まれていユーザーが001.0を検索する場合、私は、001.0のような値を表示する必要があり、すべての値001.000.10

  • を示さなければならないなど001.1

  • ユーザーが00.10を検索した場合、私は値00.10を表示する必要があり、00.12など

上記の基準のためのSQLクエリを書くことで私を助けてください。

+0

コードは常に唯一の4桁の数字と(ランダムに配置)小数点で構成されていますか?ポイントは常に存在していますか? –

+0

ユーザが「001.1」と入力した場合の結果は? –

+3

'' '.'が指定されていない場合、すべての数字が正確に一致し、' .'が無視され、 '' .'が指定されている場合、最後の非ゼロの数字 " ?マッチングルールを慎重に記述してください。上記2つは、あなたの限られた例に基づいて推測しています。あなたがそれらを説明することができると思えるほど、全体の問題に対する答えが出る可能性が高くなります。 –

答えて

1

あなたのルールは完全にはっきりしているわけではありませんが、少なくとも次のことがあなたに合格した出発点として役立つことを願っています。

明らかに、検索用語は、小数点が含まれているかどうかによって2つの方法で処理する必要があります。だからまずポイントが存在するかどうかを知る必要があります。これはCHARINDEX()関数を使用して行うことができます。0を返した場合、小数点は検索語に含まれず、そうでない場合はそこにあります。このように、あなたの完全な条件は次のように構造化されます。

WHERE CHARINDEX('.', @SearchTerm) = 0 AND … /* condition to match '0010'-like input */ 
    OR CHARINDEX('.', @SearchTerm) > 0 AND … /* condition to match input containing '.' */ 

.ずに用語を検索するための条件は次のようになります。検索用語が含まれない場合のために

REPLACE(Code, '.', '') = @SearchTerm /* or maybe LIKE @SearchTerm + '%'? */ 

条件、ステップバイステップでは、

それがどのように動作する
Code LIKE REPLACE(RTRIM(REPLACE(@SearchTerm, '0', ' ')), ' ', '0') + '%' 

.は、私には以前のものよりもトリッキーようだが、とにかく、ここで私が思いついたものです例として'001.0''00.10'を使用して:あなたが見ることができるよう

Initial value             '001.0' '00.10' 
REPLACE(@SearchTerm, '0', ' ')         ' 1. ' ' .1 ' 
RTRIM(REPLACE(@SearchTerm, '0', ' '))       ' 1.' ' .1' 
REPLACE(RTRIM(REPLACE(@SearchTerm, '0', ' ')), ' ', '0')  '001.' '00.1' 
REPLACE(RTRIM(REPLACE(@SearchTerm, '0', ' ')), ' ', '0') + '%' '001.%' '00.1%' 

ので、式は.を含む検索用語をあなたのルールを満たす必要があるマスクに評価されます。一緒にすべての条件を引っ張る

は、我々は次のようWHERE句を得る:

WHERE CHARINDEX('.', @SearchTerm) = 0 AND REPLACE(Code, '.', '') = @SearchTerm 
    OR CHARINDEX('.', @SearchTerm) > 0 AND 
     Code LIKE REPLACE(RTRIM(REPLACE(@SearchTerm, '0', ' ')), ' ', '0') + '%' 
+1

ドットレス検索が一般的な場合は、索引付けできる余分な 'UndottedCode'列を追加すると、パフォーマンスが向上します。トリガは、 'Code'カラムの変更に基づいて値を維持することができます。パフォーマンスのための非正規化!(sm) – HABO

+0

@ user92546:良い点。計算された列はさらに優れたオプションです。 –