我有一个SQL Server查询使用以下方法过滤一些数据:
and datepart(mm,cs.timestamp) <= @month
我有一个参数@accumulate
,如果true
那么我想要高于逻辑,但如果false
那么我想做:
and datepart(mm,cs.timestamp) = @month
关于如何在同一行中的任何线索?
答案 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)
您应该使用带有IF
和THEN
语句的存储过程来区分这两个条件