我想写一个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谢谢,
发布于 2015-07-02 15:33:17
您可以使用一个案例表达式和一些简单的算法将时间值分组到桶中:
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-3、3-5等等)。
示例SQL Fiddle
样本输出:
| time | bucket |
|------------------------|--------|
| June, 08 2015 00:49:00 | 0-2 |
| June, 08 2015 23:49:00 | 22-24 |
| June, 08 2015 20:49:00 | 20-22 |
| June, 05 2015 12:47:00 | 12-14 |
| June, 05 2015 13:47:00 | 12-14 |
| June, 09 2015 16:46:00 | 16-18 |发布于 2015-07-02 15:31:40
尝试如下: SELECT (RTRIM(CAST(DATEPART(HOUR,GETDATE() AS CHAR))+'-'+ CAST(DATEPART(HOUR,GETDATE())+2)
发布于 2015-07-02 16:37:58
简单的整数除法可以为您删除右桶中的所有内容。例如,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注意,两个整数的除法默认为整数除法,这就是为什么这样做的原因。
https://stackoverflow.com/questions/31188621
复制相似问题