SQL Bucket Time Stamp增量为2小时

时间:2015-07-02 15:21:48

标签: sql sql-server sql-server-2008

我想写一个sql来将时间换成2小时的增量。 例如0-2,2-4,6-8,...... 18-20,20-22,22-24

Time             I want it to be
6/8/2015 20:49       20-22
6/5/2015 12:47       12-14
6/9/2015 16:46       16-18

谢谢,

3 个答案:

答案 0 :(得分:1)

您可以使用案例表达式和一些简单的算法将时间值分组到存储桶中:

values

请注意,我假设奇数小时应该分配到偶数编号的桶中,并且不应该有任何奇数桶(如1-3,3-5等)。

Sample SQL Fiddle

示例输出:

select
    time, 
    case 
       when datepart(hour, time) % 2 = 0 then  -- n % 2 = 0 determines if hour is even
          cast(datepart(hour, time) as varchar(2))
          + '-'
          + cast(datepart(hour, time) + 2 as varchar(2))
       else  -- hour is odd
          cast(datepart(hour, time) - 1 as varchar(2))
          + '-'
          + cast(datepart(hour, time) + 1 as varchar(2))
    end as bucket
from t

答案 1 :(得分:0)

试试这个: SELECT(RTRIM(CAST(DATEPART(HOUR,GETDATE())AS CHAR))+' - '+ CAST((DATEPART(HOUR,GETDATE())+ 2)AS CHAR))

答案 2 :(得分:0)

简单的整数除法可以为您丢弃正确的桶中的所有内容。例如,1/2 = 0,2 / 2 = 1,3 / 2 = 1等。之后只是格式化输出的问题:

select
    time, 
    cast((datepart(hour, time)/2)*2 as varchar(2))+'-'+ cast((datepart(hour, time)/2)*2+2 as varchar(2)) as bucket
from t

请注意,两个整数的除法默认为整数除法,这就是为什么这样做的原因。