0

我必须检查日期的条件是否一个表的日期列在另一个表的另外两组日期的范围内..

第一张表:

1. id
2. name
3. date

第二张表;

1. id
.
.
.
.
17 : Start Date
18 : End Date

我必须检查第一个表的date字段是否在第二个表的范围Start DateEnd Date

例如

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*

请帮忙。

4

2 回答 2

4

因此,基本上,您希望将没有结束日期的情况视为“正在进行的”情况,因此,如果第一个条件为真,它应该为真。基本上满足以下条件:

  1. 日期晚于或在开始日期,并且
  2. 一个。日期在结束日期之前或之后或
    b。没有结束日期

现在很容易执行 SQL:

(t1.date>= t2.StartDate) and ((t1.date <= t2.EndDate) or (t2.EndDate is null))

请注意,您可以使用betweenand获得类似的结果isnull,但就我而言,如果条件是不言自明的,则更清楚,我可以将它们作为纯文本阅读。


(旧答案,假设整行为t2空,如左连接)

您可以只添加第二行不为空的条件,即字段t2.StartDatet2.EndDate不为空

(t1.date>= t2.Start Date and t1.date <= t2.End Date and t2.End Date is not null)
于 2013-09-30T06:28:04.683 回答
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)

于 2013-09-30T06:29:24.523 回答