我可以在where子句的中间使用If / Else或Case吗?

时间:2012-02-15 23:36:44

标签: tsql sql-server-2008-r2

我已经解决了这个问题了一段时间,但我认为必须有一个更简单的方法,所以我决定发帖。

我有一个数据过滤器参数,我想在where子句中创建一个if / else分支或case分支。如果我的@State变量不是“All”,我想在我的where子句中添加“And(state = @State)”。

SELECT     timestamp, service, state
FROM         socketLog
WHERE     (timestamp BETWEEN dbo.fxMilitaryTime('02/01/12', 'mdy') 
    AND DATEADD(dd, 1, getdate())) AND (state = @State)
ORDER BY service

我试图让if / else和case语句在哪里工作但我有语法问题。我很确定where子句支持case和if语句,但我无法正常工作。

感谢有时间提供帮助的人。

3 个答案:

答案 0 :(得分:3)

你不能把最后一位改为:

AND (@State = 'All' OR @State = state)

除非我误解了?!

答案 1 :(得分:1)

如果@ State ='All',则忽略下面的WHERE子句,或者如果设置为其他任何内容,则将其用作过滤器。

WHERE ('All' = @State or state = @State) 

答案 2 :(得分:1)

胜利者是我。

Declare @State varchar(20)
set @State = 'All'
SELECT     timestamp, service, state
FROM         socketLog
WHERE     (timestamp BETWEEN dbo.fxMilitaryTime('02/01/12', 'mdy') AND DATEADD(dd, 1, getdate()))
and (State = @State OR (@State = 'All'))
ORDER BY service
go