在Case声明中需要帮助

Sha*_*sra 1 sql t-sql sql-server-2005 sql-server-2008

我需要帮助编写一个case语句,这将允许我将数据放在两个不同的场景中.

我有大约1000万行的数据,需要根据时间过滤数据.

如果数据是这样的:

有一个名为的专栏CALL.它包括通话时间(意味着通话的时间).

现在的情况是,如果电话是在上午8点到中午12点(中午)之间进行的,那么它应该属于一个类别,如果在下午12点到下午4点之间打电话,它应该属于另一个类别.

所以它应该是这样的:

case 
 when 
      call between (8am-12pm) then 'abc' 
 when
      call between (12pm- 4pm) then 'def'
 when 
      call after 4pm then it should comes under next day means next day morning 'abc'
Run Code Online (Sandbox Code Playgroud)

我知道可能很简单,但我无法弄明白.

如何才能做到这一点?

Sir*_*lot 5

这个怎么样:

case
    when datepart(hour,[call]) < 8 then 'abc'
    when datepart(hour,[call]) between 8 and 11 then 'abc'
    when datepart(hour,[call]) between 12 and 15 then 'def'
    when datepart(hour,[call]) >= 16 then 'abc'
end
Run Code Online (Sandbox Code Playgroud)

显然前两个条款可以合并,但我不确定你想在午夜和早上8点之间打电话.

编辑 您没有指定下午4点到晚上8点之间发生的事情,但您应该能够弄明白!

编辑更正的between子句(感谢@Andriy).@Shahsra--现在意味着call正好是正午的值将转到'def'但是11:59会转到'abc'.当然,如果这不是你想要的,你可以很容易地调整它.关键是datepart(hour,[call])你需要根据你的条款.