我想写一个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
谢谢,
答案 0 :(得分:1)
您可以使用案例表达式和一些简单的算法将时间值分组到存储桶中:
values
请注意,我假设奇数小时应该分配到偶数编号的桶中,并且不应该有任何奇数桶(如1-3,3-5等)。
示例输出:
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
请注意,两个整数的除法默认为整数除法,这就是为什么这样做的原因。