MySQL:查找具有冲突日期范围的行

时间:2010-04-26 12:22:09

标签: mysql date range

我正在为我们的网站编写广告预订系统。我们使用StartDateEndDate字段预订了广告,以表明他们在线的时长。

添加新广告时,我会进行快速验证检查,以确保新广告不会与预订到同一位置的现有广告冲突。

我以为我有这个问题:

SELECT * 
FROM adverts 
WHERE EndDate >= '2010-04-22' 
AND StartDate < '2010-04-22'

2010-4-22是我要预订的新广告的StartDate。已预订的广告的StartDate为2010-04-26,EndDate为2010-05-09。

这些是具有不同日期的查询结果:


  • 尝试在现有广告结束后预订广告:返回0行(正确)

  • 尝试预订在现有广告的日期范围内开始和结束的广告:返回1行(正确)

  • 尝试在现有广告开始之前预订广告开始和结束:返回0行 (正确的)

  • 尝试在现有广告开始之前预订广告,并在现有广告的日期范围内持续广告:返回0行(不正确)

  • 尝试预订广告,然后在当前广告结束后结束:返回0行(不正确!)


有没有人有任何想法如何重写这个查询,所以我可以确保它只在日期范围内发现冲突?

谢谢, 马特

1 个答案:

答案 0 :(得分:6)

SELECT *
  FROM adverts
 WHERE `EndDate` >= :AdStartDate
   AND `StartDate` <= :AdEndDate

我没有考虑开始日期和结束日期相等的边缘情况,因为我不知道你的规则是什么。