1

当过滤器的值在一个语句中为空时,如何忽略 where 条件?

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

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

是否可以编写一个单独的 where 条件来处理上述情况?

我知道CASE WHEN当我的专栏使用“=”时我可以声明。

或喜欢:

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

但我有大于和小于运算符。

我有更多的大于和小于这样的过滤器,所以我需要让它工作。

那将如何实现?

谢谢

4

3 回答 3

4

一种方法是像这样组合子句:

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, '') 

ETC

于 2012-08-28T14:21:22.927 回答