我必须在日期检查条件的日期列是否在其他表的另外两组日期的范围内。
第一张表:
1. id
2. name
3. date
第二张表;
1. id
.
.
.
.
17 : Start Date
18 : End Date
我必须检查第一个表的date
字段是否在第二个表的Start Date
和End Date
范围内。
e.g。
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*
请帮忙。
答案 0 :(得分:4)
所以基本上,你希望在没有结束日期作为&#34;正在进行的&#34; case,所以,如果第一个条件为真,它应该是真的。基本上,如果符合以下条件:
现在可以轻松地执行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)
答案 1 :(得分:0)
您可以使用IS NOT NULL
然后看起来像这样
(t1.date BETWEEN t2.Start Date and t2.End Date AND t2.End Date IS NOT NULL)
然后你不应该在你的列名中使用空格,而是使用endDate或end_date(我更喜欢endDate)