SQL:定义的时间间隔内的时间间隔

时间:2017-07-19 18:52:14

标签: sql sql-server time

我遇到一个问题,我有两个定义的互相排斥的时间段: 夜晚 18:00至06:00之间 DAY 06:00至18:00之间

然后我的记录间隔为 BEGIN STOP 次,我基本上想要计算所述间隔的下降部分(即多少小时/分钟) DAY / NIGHT 期间。

*我的所有时间都是hhmm格式的整数,所以645表示6:45而1801表示18:01

所以......

BEGIN  STOP  NIGHT  DAY
0      650   600    50
1951   235   644    0
930    1500  0      530
1700   2122  322    100

我真的不关心时间格式,我只需要理解用于以有效的方式解决这个问题的算法,不涉及几个嵌套的条件语句。

1 个答案:

答案 0 :(得分:0)

您可以使用case执行此操作。这是一个将句号分为三个的例子(你可以将第一个和第三个结合起来):

select (case when begin < 6
             then least(6, end) - begin
             else 0
        end) as night_1,
       (case when begin < 18 or end > 6
             then least(18, end) - greatest(begin, 6)
        end) as day,
       (case when end > 18 
             then end - greatest(begin, 18)
             else 0
        end) as night_2

对于实际计算,您应该定义:

begin_hours = floor(begin / 100.0) + (begin % 100)/100.0
end_hours = floor(end / 100.0) + (end % 100)/100.0

然后在上一个查询中使用这些值。这会将值转换为十进制小时。