- ベストアンサー
SQLで複数の日付型の引数をand条件で結びたい方法
- SQLのSELECT文で複数の日付型の引数をand条件で結びたい場合、引数がnullの場合は検索したくないという条件もあります。
- しかし、現在の方法では引数が何もセットされていない場合には値が0件で返ってしまいます。
- この問題を解決するためには、引数がnullの場合にはその条件を無視するようにする必要があります。具体的には、(B = 引数 or 引数 is null)のような条件を使用します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
A=Nullは Falseではなく、Nullになります なので、引数がNullのばあい、 B = 引数→Null なので (B = 引数 or 引数 is null) もNullになります。 Caseなどで場合わけするしかないのでは? B = Case 引数 IsNull then B else 引数 end とか。
その他の回答 (3)
- khazad-lefty
- ベストアンサー率44% (296/668)
補足。 NULL 値の比較(MSDN)より(参考リンク) ------ SET ANSI_NULLS をオンにすると、比較する式のどれかが NULL の場合、TRUE または FALSE は生成されず、UNKNOWN が返されます。認識できない値はそれ以外の値と論理的に比較できないためです。 ------
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
select A,B,C from XXX where A = '1' and (B = 引数 or 引数 is null) and (C = 引数 or 引数 is null) and (D = 引数 or 引数 is null) は、 select A,B,C from XXX where A = '1' and (引数 is null or (B = 引数 and C = 引数 and D = 引数)) に等しいんですけど、良いんですよね? 仮に良いという前提で・・ select A,B,C from XXX where A = '1' and (引数 = '' or 引数 is null or (B = 引数 and C = 引数 and D = 引数)) で、NULLだけでなく''(空文字列)も判定要素に加えたら、動きませんか? これで動くなら、引数を与える側が、NULLをちゃんと設定していません。
- NYOI
- ベストアンサー率58% (56/96)
うーん、それでもいけそうな感じなんですが。 'NULL' IS NULL とかになってませんよね? 代案としては A = '1' and B = ISNULL(引数,B) and C = ISNULL(引数,C) and D = ISNULL(引数,D) とかどうでしょう。