在Case声明中需要帮助

时间:2011-03-25 16:35:36

标签: sql sql-server-2005 tsql 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'

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

如何做到这一点?

1 个答案:

答案 0 :(得分: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

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

修改 你没有具体说明下午4点到晚上8点之间会发生什么,但是你应该能够搞清楚了!

修改更正between条款(感谢@Andriy)。 @Shahsra - 现在意味着正好中午的call值将变为'def'但是11:59将变为'abc'。当然,如果这不是你想要的,你可以很容易地调整它。关键是datepart(hour,[call])是你需要的基础。