あなたのルールは完全にはっきりしているわけではありませんが、少なくとも次のことがあなたに合格した出発点として役立つことを願っています。
明らかに、検索用語は、小数点が含まれているかどうかによって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') + '%'
コードは常に唯一の4桁の数字と(ランダムに配置)小数点で構成されていますか?ポイントは常に存在していますか? –
ユーザが「001.1」と入力した場合の結果は? –
'' '.'が指定されていない場合、すべての数字が正確に一致し、' .'が無視され、 '' .'が指定されている場合、最後の非ゼロの数字 " ?マッチングルールを慎重に記述してください。上記2つは、あなたの限られた例に基づいて推測しています。あなたがそれらを説明することができると思えるほど、全体の問題に対する答えが出る可能性が高くなります。 –