1

フィールドが値であるかどうか、またはフィールドに値が含まれているかどうかに基づいてクエリをフィルタリングするT-SQLcaseステートメントを作成しようとしてNULLいます。あなたが割り当てることができれば、NULLまたはNOT NULLケースの結果としてそれは簡単でしょうが、それは可能ではないようです。

これが擬似コードです:

WHERE DateColumn = CASE @BitInput
   WHEN 0 THEN (all null dates)
   WHEN 1 THEN (any non-null date)
   WHEN NULL THEN (return all rows)

私の理解では、WHEN 0条件はまったく条件を提供しないことで達成できますWHEN(値を返すためNULL)。

条件はWHEN 1ワイルドカード文字を使用できるようですが、型変換に関してエラーが発生します。列をそれ自体に割り当てると、これが修正されます。

私はその状態に対して何をすべきか分かりませんWHEN NULL。私の内部ロジックは、列をそれ自体に割り当てることでこれを解決できると考えているようですが、上記のようには解決しません。

動的SQLを使用してこれを再作成しましたが、さまざまな理由から、ネイティブコードで作成することをお勧めします。

ご意見をいただければ幸いです。ありがとう。

4

1 に答える 1

2

CASE式(OMG Poniesが言ったように)は(あなたが見つけたように)データ型を混合して一致させています。さらに、=またはWHENを使用してNULLと比較することはできません。

WHERE
   (@BitInput = 0 AND DateColumn IS NULL)
   OR
   (@BitInput = 1 AND DateColumn IS NOT NULL)
   OR
   @BitInput IS NULL

おそらくCASEを使用して書くこともできますが、実際に必要なのはORです。

IF..ELSEまたはUNION ALLを使用して、3つのケースを分離することもできます

于 2010-06-30T17:33:36.987 に答える