Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MYSQL查询中指定空日期?_Mysql_Sql - Fatal编程技术网

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

如何在MYSQL查询中指定空日期?,mysql,sql,Mysql,Sql,我必须检查一个关于日期的条件,即一个表的datecolumn是否在另一个表的另外两组日期的范围内 第一张表: 1. id 2. name 3. date 第二表 1. id . . . . 17 : Start Date 18 : End Date 我必须检查第一个表的日期字段是否在第二个表的开始日期和结束日期范围内 e、 g 第二种情况 t1.date = 26-Nov-2011 t2.Start Date = 25-Nov-2011 t2.End Date = 27-Nov-20

我必须检查一个关于日期的条件,即一个表的datecolumn是否在另一个表的另外两组日期的范围内

第一张表:

1. id
2. name
3. date
第二表

1. id
.
.
.
.
17 : Start Date
18 : End Date
我必须检查第一个表的
日期
字段是否在第二个表的
开始日期
结束日期
范围内

e、 g

第二种情况

 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*
第四种情况

 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*

请帮助。

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

  • 该日期在开始日期之后或之上,并且
  • a。日期早于或在结束日期或
    B没有结束日期
  • 现在很容易执行SQL:

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

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

  • 该日期在开始日期之后或之上,并且
  • a。日期早于或在结束日期或
    B没有结束日期
  • 现在很容易执行SQL:

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

    您可以使用

    然后它看起来像这样

    (t1.date BETWEEN t2.Start Date and t2.End Date AND t2.End Date IS NOT NULL)
    

    顺便说一句,您不应该在列名中使用空格,而应该使用endDate或end_date(我更喜欢endDate)

    您可以使用

    然后它看起来像这样

    (t1.date BETWEEN t2.Start Date and t2.End Date AND t2.End Date IS NOT NULL)
    

    顺便说一句,您不应该在列名中使用空格,而是使用endDate或end_date(我更喜欢endDate)

    使用
    BETWEEN
    语句而不是
    >=并使用
    BETWEEN
    语句而不是
    >=在上述解决方案中,如果endDate为null,则该语句返回false。。但是,如果第一个条件为true,它应该返回true。如果end date为null,则第一个条件仍然为null,否则在上述解决方案中,您必须进一步说明您的意思,如果end date为null,则语句返回false。。但是,如果第一个条件为true,它应该返回true。如果end date为null,则第一个条件仍然为null,否则在上述解决方案中,您必须进一步说明您的意思,如果end date为null,则语句返回false。。但是,如果第一个条件为真,它应该返回真。这与问题中所说的不同。这意味着整个
    t2
    行是空的,就像左连接一样。请编辑问题并澄清条件。在上述解决方案中,如果结束日期为空,则该语句返回false。。但是,如果第一个条件为真,它应该返回真。这与问题中所说的不同。这意味着整个
    t2
    行是空的,就像左连接一样。请编辑问题并澄清条件。