如何检查可选日期范围是否在可选日期范围之间

时间:2019-04-03 20:02:51

标签: mysql sql date date-range

我在编写查询以检查每次交付是否都在项目的日期范围内时遇到麻烦。 我查看了this question,但是我的日期范围不一定要结束,在这种情况下endDate为空。

我的项目表和交付表都包含一个startDate和一个endDate,并带有一个约束以确保endDate为null或在startDate之后。

这是我的选择:

SELECT *
FROM Projet
    INNER JOIN Delivery ON Delivery.ProjetId = Projet.ProjetId

我尝试使用BETWEEN,但是由于可能的NULL,我错过了任何正在进行的项目。

WHERE Delivery.startDate BETWEEN Projet.startDate AND Projet.endDate

1 个答案:

答案 0 :(得分:0)

您的查询应类似于:

SELECT *
FROM Projet p
INNER JOIN Delivery d ON d.ProjetId = p.ProjetId
WHERE d.startDate >= p.startDate
  AND (p.endDate is null
    OR p.endDate is not null
    AND (d.endDate is null OR d.endDate <= p.endDate)
  )