首页 > 解决方案 > 如何检查可选日期范围是否在可选日期范围之间

问题描述

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

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

这是我的选择:

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

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

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

标签: mysqlsqldatedate-range

解决方案


您的查询应如下所示:

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

推荐阅读