SQL:如何合并CASE

时间:2016-10-20 21:57:03

标签: sql sql-server case

我必须重复两次CASE声明,并且我想知道是否有办法巩固它。

基本上,我有一个:

IProfileService

问题是我需要根据CASE语句将DATEADD发送到open_time。我不知道如何将它合并在一起,所以我要做两次。 像:

GetProfileDataAsync

有没有办法让我不必重复整个CASE状态?

2 个答案:

答案 0 :(得分:0)

使用BETWEEN?

a between b and c

请注意,两者之间是“包含”,因此a <= b AND b <= c为{{1}}。

答案 1 :(得分:0)

您可以将其写为:

where (month(open_time) = 1 and
       cast(dateadd(hour, -5, open_time) as date) between '2016-11-01' and '2016-11-30'
      ) or
      (month(open_time) <> 1 and
       cast(dateadd(hour, -4, open_time) as date) between '2016-11-01' and '2016-11-30'
      )

我不喜欢使用between date / time值的 month(open_time) <> 1 and cast(dateadd(hour, case when month(open_time) = 1 then -5 else -4 end, open_time ) as date) between '2016-11-01' and '2016-11-30' 。在这种情况下,值显式一个日期,所以它看起来不会太混乱。

或者,如果您愿意:

git checkout --merge path/to/file