[SQL Server]パラメータ値で抽出条件(値の有無)を切り替える

[スポンサードリンク]

例えば、商品の色が登録されているもの、登録されていないものなどを取得する場合

概要

以前の記事、「NULLと0または空文字を除外する」では、ある列の値がNULLや0、空文字でないレコードを取得する方法を記載した。

仕様により、検索条件のパラメータにより、「NULL、空文字を除外」したり、「NULL、空文字のみを抽出」するといった切り替えが必要な場合がある。

例えば、商品の色が登録されているものが欲しい、逆に商品の色が登録されていないものが欲しい。
配属先の決まった新人のデータが欲しい、逆に配属先の決まっていない新人のデータが欲しいなど。

検索条件は下図のような感じ。

これをVBや、C#などの言語上で行うなら、例をあげるとこのようなイメージになる。

あ、ちなみにifの中は
「if(blnColor)」とか「if(!blnColor)」とかは、私の場合実務ではあまり書きません。
実務では様々なレベルの技術者が半月後、数年後にソースコードを見ることになりますので、なるべく省略しないように書いてます。

SQLのみで行う場合

しかし、これをBIツール(例えばSSRSなど)で行う場合、SQLやストアドのみで行わなければならない。
この場合、TransactSQLで文字列変数にSQLを入れてIF条件分岐でSQLを作って実行する方法もあるが、
非常に面倒くさいため、LIKEでおこなう方が単純でおススメである。

9行目のパラメータ「@ColorBool」の値を「0」に設定すると色が設定されているレコードを取得する。

「’_%’」の意味は1文字以上の任意の文字列である。

「_」アンダーバーは、「何か1文字」という意味であるため、これだけでは2文字以上の値が格納されているとレコードを取得することができない。
ここで、「0文字以上」を表す「%」を後ろにくっつけると、列に「1文字以上」の値が入っているものを抽出する。

アンダーバーやパーセントなどのワイルドカードを使用しない場合は固定値を検索するので、色なしの場合は「”」普通に空文字を指定すれば良い。

ISNULLでNULLを空文字に変換しているので、NULLと空文字の両方を処理できる。

[スポンサードリンク]

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


ピックアップ記事

  1. 割り算に必須な0除算回避 (さらに…)…
  2. EXECUTE 権限がオブジェクト '関数名'、データベース 'データベース名'、スキーマ 'dbo…
  3. あいまい検索での否定 ○○以外の書き方 あいまい検索での否定は「[^任意の文字・文字列]…
  4. 本記事ではXMLからSQLを取得し、SQLiteで実行する。プリペアードステートメントを使用する。 …
  5. SSRSのデータセットにクエリが貼り付けられない場合 (さらに…)…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る