场景需求一:判断 begin_time-end_time 是否和 08:00-12:00 重叠
以下为hql实现:
if(end_time>=unix_timestamp(concat(day_id,'120000'),'yyyyMMddHHmmss'),unix_timestamp(concat(day_id,'120000'),'yyyyMMddHHmmss'),end_time)-
if(begin_time>=unix_timestamp(concat(day_id,'080000'),'yyyyMMddHHmmss'),begin_time,unix_timestamp(concat(day_id,'080000'),'yyyyMMddHHmmss'))> =0
案例1: 3点-6点 06-08=-2
案例2: 3点-9点 09-08=1
案例3: 9点-10点 10-09=1
案例4: 9点-13点 12-09=3
案例5: 13点-18点 12-13=-1
场景需求二:提取t1表中begin_time、end_time时间片 和 t2表中begin_time、end_time时间片重叠时间
正值为重叠时间,负值为距离时间
if(t1.end_time>=t2.end_time, t2.end_time, t1.end_time) - if(t1.begin_time>=t2.begin_time, t1.begin_time, t2.begin_time)
总体思路:结束时间取两者最小时间-开始时间取两者最大时间