SQL如何在where子句

时间:2017-01-20 20:36:31

标签: sql sql-server

我有一个SQL Server查询使用以下方法过滤一些数据:

and datepart(mm,cs.timestamp) <= @month

我有一个参数@accumulate,如果true那么我想要高于逻辑,但如果false那么我想做:

and datepart(mm,cs.timestamp) = @month

关于如何在同一行中的任何线索?

3 个答案:

答案 0 :(得分:3)

我不确定你是否可以一行完成。但你可以在多行中这样做:

and ( ( datepart(mm,cs.timestamp) <= @month and @accumulate = true )
   or ( datepart(mm.cs.timestamp) = @month and @accummulate = false ) )

答案 1 :(得分:0)

这更简洁,可以是一行

(DATEPART(mm,cs.timestamp) = @month 
 OR (@accumulate = 1 AND DATEPART(mm, cs.timestamp) < @month))

或者,对肖恩的评论(这是一个很好的建议)点头致意

(DATEPART(MONTH,cs.timestamp) = @month 
 OR (@accumulate = 1 AND DATEPART(MONTH, cs.timestamp) < @month))

或者,如果你想要一个简短但不透明和讨厌的代码(并且@accumulate有点)

SIGN(@month - DATEPART(MONTH, cs.timestamp)) in (0, @accumulate)

答案 2 :(得分:0)

您应该使用带有IFTHEN语句的存储过程来区分这两个条件