使用oracle sql将日期映射到时间间隔

使用oracle sql将日期映射到时间间隔,sql,date,oracle11g,mapping,Sql,Date,Oracle11g,Mapping,我有以下问题: 我有一个开始字段类型:timestamp和一个结束字段类型:timestamp。现在我想把这个间隔分配给一个小时定向间隔[0-1],[1-0] 例子: 开始时间:14:20 完:16时45分 结果应该是: [0-1],[1-2]…..[13-14],[14-15],[15-16],[16-17],[17-18]…. 0001110 我到目前为止所做的: 到目前为止,我所做的是在位掩码中映射这个开始-结束间隔。这是一种简单有效的方法。因此,上面示例中的位掩码看起来像是最低有效位

我有以下问题:

我有一个开始字段类型:timestamp和一个结束字段类型:timestamp。现在我想把这个间隔分配给一个小时定向间隔[0-1],[1-0]

例子: 开始时间:14:20 完:16时45分 结果应该是: [0-1],[1-2]…..[13-14],[14-15],[15-16],[16-17],[17-18]…. 0001110 我到目前为止所做的: 到目前为止,我所做的是在位掩码中映射这个开始-结束间隔。这是一种简单有效的方法。因此,上面示例中的位掩码看起来像是最低有效位对应于[0-1]的范围: 000000011100000000000000 2 ≙ 114688 然后我做一个位并决定它是否对应于一个范围:

但是这个解决方案非常长,不容易处理,并且在bitand部分重复了非常相似的行。有谁知道更短/更好的解决方案吗?
PS:不允许使用存储过程

为什么不直接比较

(case when extract(hour from start) <= 0 and extract(hour from end) >= 0 then 1 else 0 end) as hour_01,
(case when extract(hour from start) <= 1 and extract(hour from end) >= 1 then 1 else 0 end) as hour_02,
. . .

这大约是相同数量的代码,但您正在做的事情更加清晰。

是的,这绝对更清晰。但如果有一个更短的选择,我忘了提到,这是一个次级选择。选择构建每行24行代码的总和更多!这将非常有用。无论如何,这个建议提高了我的代码的质量。=>谢谢大家,-
(case when extract(hour from start) <= 0 and extract(hour from end) >= 0 then 1 else 0 end) as hour_01,
(case when extract(hour from start) <= 1 and extract(hour from end) >= 1 then 1 else 0 end) as hour_02,
. . .