我必须检查日期条件是否表的日期列在其他表的另外两组日期范围内..
第一个表:
1. id
2. name
3. date
第二张表;
1. id
.
.
.
.
17 : Start Date
18 : End Date
我必须检查 date
第一个表的字段在 Start Date
范围内和 End Date
第二张 table 。
例如
t1.date>= t2.Start Date and t1.date <= t2.End Date
问题是,有一些行 t2
一片空白..
如果是null
, 然后第二个条件返回 true
.
第一个案例
t1.date = 26-Nov-2011
t2.Start Date = 25-Nov-2011
t2.End Date = 27-Nov-2012
*Passed*
第二种情况
t1.date = 26-Nov-2011
t2.Start Date = 25-Nov-2011
t2.End Date = 25-Nov-2011
*FAILED*
第三种情况
t1.date = 26-Nov-2011
t2.Start Date = 27-Nov-2011
t2.End Date = 27-Nov-2011
*FAILED*
第四个案例
t1.date = 26-Nov-2011
t2.Start Date = 25-Nov-2011
t2.End Date = null
*Passed*
请帮忙。
最佳答案
所以基本上,您希望将没有结束日期的案例视为“正在进行的”案例,因此,如果第一个条件为真,它就应该为真。如果满足以下条件,则基本满足:
- 日期在开始日期之后或当天并且
- 一个。日期在结束日期之前或之内或
b.没有结束日期
现在执行 SQL 很容易了:
(t1.date>= t2.StartDate) and ((t1.date <= t2.EndDate) or (t2.EndDate is null))
请注意,您可以使用 between
和 isnull
获得类似的结果,但就我而言,如果条件是不言自明的,它会更清楚,并且我可以将它们作为明文阅读。
(旧答案,假设整个 t2
行为空,从左连接开始)
您可以只添加第二行不为空的条件,即字段 t2.StartDate
和 t2.EndDate
不为空
(t1.date>= t2.Start Date and t1.date <= t2.End Date and t2.End Date is not null)
关于mysql - 如何在 MYSQL 查询中指定空日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19087655/