• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sql文のwhere句について)

SQLのWHERE句でのデータ抽出方法

このQ&Aのポイント
  • SQLでのデータ抽出時にWHERE句を使用する際、空白のパラメータを設定した場合と値の設定がされた場合で、データの抽出方法が異なります。
  • 空白のパラメータを設定した場合、全件取得するような条件になります。
  • 値の設定がされた場合、条件に一致するデータを抽出することができます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

ああ、単純な記述ミスでした。 No=Case when @no is null then No else @no end *↑でなぜ条件をみたすのかは理解できているでしょうか?  あと、Case文の文法は自分で調べましたか?  というのはちょっと気になります。  

noname#208236
質問者

お礼

前回の回答の後、自分なりに調べできました。 今まで、CASE文をWHERE句に使ったことがなく勉強になりました。 ありがとうございました。

その他の回答 (3)

回答No.3

Case文を使うととりあえず対応は可能かと…。 No=Case @no is null then No else @no end

noname#208236
質問者

補足

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.2

>完全一致は仕様のため変更できないのです とありますが、たとえばNOが5ケタ固定長の場合 WHERE NO LIKE '12345%' と WHERE NO = '12345' は変わらない結果が得られると思いますが。 >テーブルを作成 他には空白時とそうでない場合でsqlcommandを PGで切り替えるとかでしょうか。。。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

検索速度を犠牲にしてよいのなら NAMEと同じように空白時に @no = "%" で入るように変更し WHERE (NO LIKE @no) でよいのでは

noname#208236
質問者

補足

説明不足だったのですが、一本で抽出したいのはgridviewのdetasorceをsqlcommandでやりたいためです。完全一致は仕様のため変更できないのです sqlcommandでせずvb側でテーブルを作成したほうがいいかな?