mysql - 如何检查可选日期范围是否在可选日期范围之间
问题描述
我无法编写查询以检查每次交付是否在项目的日期范围内。我查看了这个问题,但我的日期范围不一定结束,在这种情况下 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
解决方案
您的查询应如下所示:
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)
)
推荐阅读
- reactjs - 找不到 React 模块?
- jquery - 我想从我通过 ajax 函数提供的 id 中获取订单号,但没有成功显示值:function(response)
- c++ - 为什么这个程序 35% 被接受,但其余的是运行时错误?
- python - 我在用 bs4 抓取网页时遇到问题
- .net - 将 MERGE 语句的更新列审计为不同表中的行
- python-3.x - 随机选择文件中的两个位置并交换单词
- laravel - 在 Laravel 中创建后返回带有关系的 Modal
- python - 使用 Tensorflow 张量实现布尔索引并为这些索引分配一个新值
- sql-server - 如何在sql server中执行动态创建的查询
- php - 在 websdrver 上创建用于打印的高质量图像 (CMYK)