如何在MYSQL的查询中指定空日期?

时间:2013-09-30 06:24:49

标签: mysql sql

我必须在日期检查条件的日期列是否在其他表的另外两组日期的范围内。

第一张表:

1. id
2. name
3. date

第二张表;

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

我必须检查第一个表的date字段是否在第二个表的Start DateEnd 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*

请帮忙。

2 个答案:

答案 0 :(得分:4)

所以基本上,你希望在没有结束日期作为&#34;正在进行的&#34; case,所以,如果第一个条件为真,它应该是真的。基本上,如果符合以下条件:

  1. 日期在开始日期之后或之后
  2. 一个。日期是在结束日期之前或结束日期或
    湾没有结束日期
  3. 现在可以轻松地执行SQ​​L:

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

    请注意,您可以使用betweenisnull获得类似的结果,但就我而言,如果条件不言自明,它会更加清晰,并且我可以把它们看作明文。


    (旧答案,假设整个t2行为空,从左连接开始)

    您只需添加第二行不为空的条件,即字段t2.StartDatet2.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)