首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL桶时间标记为2小时增量

SQL桶时间标记为2小时增量
EN

Stack Overflow用户
提问于 2015-07-02 15:21:48
回答 3查看 786关注 0票数 3

我想写一个sql,将时间分解为2小时的增量。例如0-2,2-4,6-8,………18-20,20-22,22-24

代码语言:javascript
复制
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

谢谢,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-02 15:33:17

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

代码语言:javascript
复制
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

样本输出:

代码语言:javascript
复制
|                   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 |
票数 1
EN

Stack Overflow用户

发布于 2015-07-02 15:31:40

尝试如下: SELECT (RTRIM(CAST(DATEPART(HOUR,GETDATE() AS CHAR))+'-'+ CAST(DATEPART(HOUR,GETDATE())+2)

票数 0
EN

Stack Overflow用户

发布于 2015-07-02 16:37:58

简单的整数除法可以为您删除右桶中的所有内容。例如,1/2 = 0,2/2 = 1,3/2 = 1,等等。在此之后,只需格式化输出:

代码语言:javascript
复制
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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31188621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档