2009-05-06 177 views
1

我有一个MySQL数据库,里面有一个名为ProductMaster的表,其中有6个字段“Product_Id,Product_Name,Model,Opening_date,Closing_Date,Status”。 Opening_Date和Closing Date可以接受空值。因此有些记录具有此字段的值Mysql查询:Where子句如果存在

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

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

现在我想改变查询到对Opening_Date和Closing_Date 的过滤器,如果它们不为空

例如:如果一个记录是有Opening_Date为2008.01.29和截止日期如2009年5月30日 然后我想检查是否今天是在这两个日期之间,如果是一个日期,返回记录

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

可以在任何Ø ne帮我构建查询?在此先感谢

+0

你能否澄清一下,如果记录的opening_date和closing_date设置为null应该返回? – mattkemp 2009-05-07 02:09:03

回答

3

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

如果我理解正确的话,你想要做的两件事情:

  1. 检查是否opening_dateclosing_datenull
  2. 检查,如果今天是在这两个日期之间。

而且您希望#2仅在#1为真时才会发生。这可能是表达,如:

#1 AND #2 

这将是错误的评估如果任#1或#2是假的。

这可以翻译为:如果我们把

  1. (opening_date IS NOT NULL) AND (closing_date IS NOT NULL)
  2. NOW() >= opening_date AND NOW <= closing_date

所以这两个好像在表达的#1和#2,我们说,我们要使用(#1 AND #2)然后我们得到:

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

这就是你需要的WHERE条款。