web-dev-qa-db-ja.com

SQL Server:LIKEでCASEを使用する

私はSQLにかなり慣れていないので、ここの誰かが私を助けてくれることを願っています。

列に特定の国が含まれているかどうかに応じて異なる値を渡したいストアドプロシージャがあります。

これまでのところ、特定の数値または値との一致をチェックするときにCASEのみを使用したため、これについてはわかりません。以下が有効で正しいかどうかを誰かに教えてもらえますか、これを適切に書く方法を教えてください(括弧内の部分に関して)?

(CASE countries
     WHEN LIKE '%'+@selCountry+'%' THEN 'national'
     ELSE 'regional') AS validity

注: @selCountryは国の変数名です。国は空、1つの国、またはカンマとスペースで区切られた複数の国のいずれかです。基本的に、国に@selCountryが含まれているかどうかを確認し、含まれている場合は、有効性を 'national'に設定します。

17
Mike

必要な構文は次のとおりです。

CASE WHEN countries LIKE '%'+@selCountry+'%' THEN 'national' ELSE 'regional' END

元の問題ごとに、@ selcountryのコンテンツをテーブルフォームに分割して結合するという、別の方法で解決します。

32
dean

エイリアス名の前に最後にENDを追加します。

CASE WHEN countries LIKE '%'+@selCountry+'%' 
     THEN 'national' ELSE 'regional' 
END AS validity

例えば:

SELECT CASE WHEN countries LIKE '%'+@selCountry+'%' 
       THEN 'national' ELSE 'regional' 
       END AS validity
FROM TableName
3
Raging Bull

このようにすることもできます

select *
from table
where columnName like '%' + case when @varColumn is null then '' else @varColumn end  +  ' %'
1
MelPogz