mysql 过滤时间重叠_mysql – 防止创建重叠的日期范围

通常,如果您有两个范围,其中S1..E1和S2..E2作为范围的起始值和结束值,则在以下情况下重叠:

> S1< E2和

> S2< E1

这是对称的,这是好的(并且令人放心).您需要仔细决定那些“少于”的操作是否应该“小于或等于”;两者都可以有意义,具体取决于您存储数据的方式(开放与封闭对比半开放或开放封闭和封闭开放范围等).您可以在问题‘Determine whether two date ranges overlap’上看到diagram的可能性.

在您的上下文中,’ShowDate’对应于开始日期,’HideDate’对应于结束日期.

听起来好像你也想做一个‘conditional insert’.在这种情况下,假设您的StoreID为1001,ShowDate为2012-03-21,HideDate为2012-03-28,那么您可以写:

INSERT INTO Calendar(StoreID, ShowDate, HideDate, ...)

SELECT 1001, '2012-03-21', '2012-03-28', ...

FROM Dual

WHERE NOT EXISTS(SELECT * FROM Calendar C2

WHERE C2.StoreID = 1001

AND C2.ShowDate < '2012-03-28'

AND '2012-03-21' < C2.HideDate

);

SELECT列表中的值是您要添加到Calendar表的值.子选择意味着您获得0行(因为存在重叠)或1行(因为没有重叠)与新值的数据.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值