Mysql查询:Where子句如果存在

时间:2009-05-06 05:50:42

标签: mysql exists

我有一个MySQL数据库,里面有一个名为ProductMaster的表,其中包含6个字段“Product_Id,Product_Name,Model,Opening_date,Closing_Date,Status”。 Opening_Date和Closing Date可以接受空值。因此,某些记录具有此字段的值

我有以下查询来显示此表中的记录。

"select Product_Id,Product_Name,Model from ProductMaster  where Status=1"

现在我想更改查询以在Opening_Date和Closing_Date上设置过滤器 如果它们不是空的

例如:如果记录的Opening_Date为05/01/2009,截止日期为05/30/2009 然后我想检查今天是否是这两个日期之间的日期,如果是,则返回记录

如果两个字段值均为空,则返回记录

任何人都可以帮我构建查询框架吗?提前致谢

1 个答案:

答案 0 :(得分:3)

查询的WHERE部分(“WHERE子句”)只是一个长布尔表达式。这是什么意思? MySQL只是希望它返回true或false,它理解为“是的。在结果中包含这一行。”或者“不。不要在结果中包含这一行。”

如果我理解正确,你想做两件事:

  1. 检查opening_dateclosing_datenull
  2. 检查今天是否在这两个日期之间。
  3. 如果#1为真,你只希望#2发生。这可以表达为:

    #1 AND #2
    

    如果#1或#2为假,则将其评估为false。

    可以翻译为:

    1. (opening_date IS NOT NULL) AND (closing_date IS NOT NULL)
    2. NOW() >= opening_date AND NOW <= closing_date
    3. 因此,如果我们将表达式中的#1和#2视为我们将要使用(#1 AND #2)的#1和#2,那么我们得到:

      ((opening_date IS NOT NULL) AND (closing_date IS NOT NULL)) 
      AND (NOW() >= opening_date AND NOW <= closing_date`)
      

      这就是你需要的WHERE条款。