![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
SQLのSELECTで困っています。
プロシージャに引数を渡してSELECTしようと考えています。
複数の日付(datetime)型の引数をand条件で結びたいです。
検索したくない場合はnullを渡す。
例)
select A,B,C from XXX
where
A = '1' and
(B = 引数 or 引数 is null) and
(C = 引数 or 引数 is null) and
(D = 引数 or 引数 is null)
=====
B,C,D はdatetimeです。
この形ですと、B,C,D全ての引数に日付が入っていれば取得できる
のですが一箇所でも引数に何もセットしないと値0件で帰ってきて
しまいます。
せっかく(is null)を使用しているのに意味がありません。
良いお知恵は無いでしょうか。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
A=Nullは
Falseではなく、Nullになります
なので、引数がNullのばあい、
B = 引数→Null
なので
(B = 引数 or 引数 is null)
もNullになります。
Caseなどで場合わけするしかないのでは?
B = Case 引数 IsNull then B else 引数 end
とか。
No.4
- 回答日時:
補足。
NULL 値の比較(MSDN)より(参考リンク)
------
SET ANSI_NULLS をオンにすると、比較する式のどれかが NULL の場合、TRUE または FALSE は生成されず、UNKNOWN が返されます。認識できない値はそれ以外の値と論理的に比較できないためです。
------
参考URL:http://msdn.microsoft.com/library/ja/default.asp …
No.2
- 回答日時:
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をちゃんと設定していません。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_16.png?5a7ff87)
No.1
- 回答日時:
うーん、それでもいけそうな感じなんですが。
'NULL' IS NULL とかになってませんよね?
代案としては
A = '1' and
B = ISNULL(引数,B) and
C = ISNULL(引数,C) and
D = ISNULL(引数,D)
とかどうでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- Access(アクセス) accessの日付フィールドから前年度だけを取り出したい 3 2022/04/13 23:13
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DATE型にNULLをセットするには?
-
SQL文で素早くNULLを除外する方法
-
副問合せで質問です
-
Oracleでの文字列連結サイズの上限
-
GROUP BYを行った後に結合した...
-
SQL文で右から1文字だけ削除す...
-
SELECTで1件のみ取得するには?
-
Accessで別テーブルの値をフォ...
-
Excelでセルの書式設定を使用し...
-
select句副問い合わせ 値の個...
-
使うべきでない文字。
-
DataGridViewの内容をDBに反映...
-
最新の日付とその金額をクエリ...
-
SQL>UPDATEと同時にその件数を...
-
ファイル書込みで一行もしくは...
-
JSPのNULLレコード表示について...
-
固定値を含む結合と複数テーブ...
-
oracleの分割delete
-
sum()の出力結果順に並び替えを...
-
Date型にNULLをセットしたい V...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL文で素早くNULLを除外する方法
-
DATE型にNULLをセットするには?
-
正常終了するが追加されない
-
ストアドプロシージャのSET文に...
-
is null のandについて(日付...
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
Accessで別テーブルの値をフォ...
-
SELECTで1件のみ取得するには?
-
select句副問い合わせ 値の個...
-
SQL文で右から1文字だけ削除す...
-
GROUP BYを使ったSELECT文の総...
-
ADO VBA 実行時エラー3021
-
ファイル書込みで一行もしくは...
-
select insertで複数テーブルか...
-
JSPのNULLレコード表示について...
-
レコードが存在しなかった場合
-
Access終了時の最適化が失敗?
-
実績累計の求め方と意味を教え...
-
sqlplusの処理が途中でとまる
おすすめ情報