SQL 时间段处理(时间段筛选,时间段取交集,时间段合并,拆分)

将平时涉及到的sql 有关时间处理的查询整理一下:

场景1:

  商家将商品放到不同的销售平台上进行销售,A商品参与了A平台某个时段的活动(减价时段),需要进行减价销售,

同时A商品此时可能也参与了B平台的活动,B平台要求该商品参与活动期间在所有平台中是价格最低(保价价格、保价时段),

所以现在要对A商品在A平台某一时段进行减价时需要考虑到是否有参与了B平台的活动

要求:查出该商品在减价时段期间是否参与了其他平台活动,若有则查出该商品在其他平台的保价价格,保价时段

思路:

查出减价时段是否存在保价时段(即存两个时段存在交集),若有交集则列出保价价格。保价时段

那么有交集是哪几种情况呢?

如图:如果存在以下四种情况之一,则需要查出保价价格

 

1.① ② 两种情况都是减价时段与保价时段有一部分交集

2.第三种情况③则是减价时段完全在保价时段内

3.第四种情况则是减价时段包含了保价时段

那么我们现在应该如何用最短的sql语句查出所有有交集的情况呢?

如下:

 Select * from table where cut_from between protect_form and protect_to OR
                           cut_from between protect_form and protect_to OR
                           protect_from between cut_from and cut_to

猜你喜欢

转载自www.cnblogs.com/ygtup/p/9849199.html