overlaps函数

gstyhher  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(372)

我正在尝试使用和重叠函数,就像在oracle或netezza中那样,它接受两个日期范围并检查它们是否重叠。像这样的事情: SELECT (TIMESTAMP '2011-01-28 00:00:00', TIMESTAMP '2011-02-01 23:59:59') OVERLAPS (TIMESTAMP '2011-02-01 00:00:00', TIMESTAMP '2011-02-01 23:59:59'); 在impala或sparksql中,最好的方法是什么?不幸的是,在impala或sparsql中不存在重叠。我唯一能想到的是自定义项,但寻找一个工作周围。提前谢谢!

rks48beu

rks48beu1#

我认为明确地写出逻辑比使用 OVERLAPS . 例如,是否包括终点?
逻辑是:

select (case when TIMESTAMP '2011-01-28 00:00:00' < TIMESTAMP '2011-02-01 23:59:59' AND
                  TIMESTAMP '2011-02-01 00:00:00' < TIMESTAMP '2011-02-01  23:59:59'
             then 1 else 0
        end) as overlaps

逻辑是。如果有两个范围,range1和range2具有开始时间和结束时间,则当第一个范围在第二个范围结束之前开始,第一个范围在第二个范围结束之后结束时,它们会重叠:

select (case when range1_start < range2_end and range1_end > range2_start
             then 1 else 0
        end) as overlaps

相关问题