SQLServer where句をある条件のときだけ有効にする方法

更新:2017.11.26 views:4772

目次

Transact-SQLで、どうしてもコードでSQLを生成したくないときに使えるテクニック。

例として、何か値を単純に判定するケースと、日付を範囲で判定するケースを書いてみました。

coalesceを使って、値がNULLじゃないときだけ、条件を有効にする

where
    1 = 1
    and coalesce(COL_1,0) = coalesce(@VAL_1,COL_1,0)
    and coalesce(COL_2,0) between
        coalesce(@VAL_START_DATE,COL_2)
        and
        coalesce(@VAL_END_DATE,COL_2)

caseを使って、値がNULLじゃないときだけ、条件を有効にする

caseを使えば、NULL判定以外も可能です。

where
    1 = 1
    and COL_1 = case when @VAL_1 is null then COL_1 else @VAL_1 end
    and COL_2 between coalesce(@VAL_START_DATE,COL_2) and coalesce(@VAL_END_DATE,COL_2)

注意事項

どうしても、コードでSQLを生成したくないときや、SQL単体でどうにかしたいとき以外は使わないの方が良いかもしれません。

インデックスがうまく使えなかったりと、パフォーマンス的に不利になるケースがあります。

SQLServer関連記事









SQLServer varcharとnvarcharの違い
2017/11/26
 1123 views

これからブログなどのサイトを作りたいと思っている人は、お名前.comでのドメイン取得がオススメです。

■□━━ 急げ、ドメインは早い者勝ち! ━━□■
     ■お名前.com

アマゾンの2019年本屋大賞一覧

そして、バトンは渡された
ひと
ベルリンは晴れているか
熱帯
ある男

楽天市場のおすすめ商品一覧

お金2.0 新しい経済のルールと生き方 [ 佐藤航陽 ]
全部レンチン!やせるおかず 作りおき 時短、手間なし、失敗なし
「読む力」と「地頭力」がいっきに身につく 東大読書 [ 西岡 壱誠 ]