我在编写查询以检查每次交付是否都在项目的日期范围内时遇到麻烦。 我查看了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
答案 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)
)