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

How to check if optional date range is between optional date range

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

我的项目和交付 table 都包含一个开始日期和一个带有约束的结束日期,以确保结束日期为空或晚于开始日期。

这是我的 select:

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

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

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

您的查询应如下所示:

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)
  )