- ベストアンサー
SQLのWHERE句でのデータ抽出方法
- SQLでのデータ抽出時にWHERE句を使用する際、空白のパラメータを設定した場合と値の設定がされた場合で、データの抽出方法が異なります。
- 空白のパラメータを設定した場合、全件取得するような条件になります。
- 値の設定がされた場合、条件に一致するデータを抽出することができます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ああ、単純な記述ミスでした。 No=Case when @no is null then No else @no end *↑でなぜ条件をみたすのかは理解できているでしょうか? あと、Case文の文法は自分で調べましたか? というのはちょっと気になります。
その他の回答 (3)
- khazad-lefty
- ベストアンサー率44% (296/668)
Case文を使うととりあえず対応は可能かと…。 No=Case @no is null then No else @no end
補足
SELECT * FROM テーブル WHERE ([NO] = CASE @no IS NULL THEN [NO] ELSE @no END) AND ((@name IS NULL) OR (@name IS NOT NULL) AND ([NAME] LIKE @name)) でエラーとなります。何度もすみませんが添削お願いします。
- o_chi_chi
- ベストアンサー率45% (131/287)
>完全一致は仕様のため変更できないのです とありますが、たとえばNOが5ケタ固定長の場合 WHERE NO LIKE '12345%' と WHERE NO = '12345' は変わらない結果が得られると思いますが。 >テーブルを作成 他には空白時とそうでない場合でsqlcommandを PGで切り替えるとかでしょうか。。。
- o_chi_chi
- ベストアンサー率45% (131/287)
検索速度を犠牲にしてよいのなら NAMEと同じように空白時に @no = "%" で入るように変更し WHERE (NO LIKE @no) でよいのでは
補足
説明不足だったのですが、一本で抽出したいのはgridviewのdetasorceをsqlcommandでやりたいためです。完全一致は仕様のため変更できないのです sqlcommandでせずvb側でテーブルを作成したほうがいいかな?
お礼
前回の回答の後、自分なりに調べできました。 今まで、CASE文をWHERE句に使ったことがなく勉強になりました。 ありがとうございました。