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

标签 mysql sql

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

第一个表:

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*

请帮忙。

最佳答案

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

  1. 日期在开始日期之后或当天并且
  2. 一个。日期在结束日期之前或之内或
    b.没有结束日期

现在执行 SQL 很容易了:

(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)

关于mysql - 如何在 MYSQL 查询中指定空日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19087655/

相关文章:

php - 如何在php中使用下拉列表显示不同的mysql表

php - 将具有不同条件和结果集的两个查询放入一张表中

sql - 如何比较 Netezza 中的日期?

MySQL 行标题基于查询中按字段分组的顺序

mysql - 需要从 MySQL 中获取行

mysql - 联合选择列不匹配

php - 从数据库中选择数据 Mysql查询

php - MySQL的插入查询在PHP失败

mysql - 违反 UNIQUE KEY 时获取一行的 id

php - 根据特定ID更新数据库