1

フィルターの値が1つのステートメントでnullの場合、where条件を無視する方法は?

-- if @filter1LowerBound is null then
select * from MyTable

-- if @filter1LowerBound is not null then
select * from MyTable
where column1 > @filter1LowerBound

上記の状況を処理する 1 つの where 条件を記述することは可能でしょうか?

CASE WHEN列が「=」を使用している場合、ステートメントを使用できることはわかっています。

または好き:

select * from MyTable
where column1 = ISNULL(@filter1LowerBound, column1) 

しかし、大なり演算子と小なり演算子があります。

私はそのようなフィルタよりも大きいフィルタと小さいフィルタを持っているので、それを機能させる必要があります。

それはどのように達成されますか?

ありがとう

4

3 に答える 3

4

1 つの方法は、次のように句を結合することです。

SELECT * FROM MyTable 
WHERE (@filter1LowBound IS NULL OR column1 > @filter1LowerBound)
   -- AND other conditions here
于 2012-08-28T14:22:57.887 に答える
3

どうですか

select * from MyTable where 
   (@filter1LowerBound is null or column1 > @filter1LowerBound)
于 2012-08-28T14:23:50.893 に答える
2

column1 が数値であると仮定します

select * from MyTable where column1 > ISNULL(@filter1LowerBound, column1-1)
select * from MyTable where column1 < ISNULL(@filter1LowerBound, column1+1) 

同様に、文字列の場合

select * from MyTable where column1 > ISNULL(@filter1LowerBound, '') 

于 2012-08-28T14:21:22.927 に答える