SQL选择比较datetime字段的行,该字段可以为null

时间:2017-02-22 16:19:25

标签: mysql sql datetime select null

我们猜测我们有下表:

- id (int) 
- active (int)
- active_from (datetime) (NULL)
- active_until (datetime) (NULL)

现在,我想要的是所有活动记录。 有效记录意味着:

 - active = 1
 - active_from <= current_date (IF IT'S NOT NULL)
 - active_until >= current_date (IF IT'S NOT NULL)

我正在寻找在单个查询中应用这3个要求的查询。我目前正在使用:

SELECT * FROM product WHERE active = 1 AND active_from <= NOW() AND active_until >= NOW();

我只会通过不具有NULL active_fromactive_until的行来获得我想要的行为。

注意:我知道将当前日期存储在变量中之后比较它会更合适(这样做是因为我用PHP参数填充它)。

提前谢谢。

3 个答案:

答案 0 :(得分:1)

在查询中使用ifnull(在其中包含active_from和active_until):

https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_ifnull

因此,基本上,如果值为null,请改用另一个日期。哪个日期取决于您和您需要的具体业务逻辑(例如:2100-01-01或1900-01-01等)

答案 1 :(得分:1)

SELECT * FROM YourTableName 
WHERE active = 1 
AND (active_from  < CURDATE() 
OR active_from IS NULL) 
AND (active_until > CURDATE() 
OR active_until IS NULL);

答案 2 :(得分:0)

SELECT * FROM product WHERE active = 1 AND(active_from&lt; CURDATE() AND active_from IS NOT NULL) AND(active_until&gt; CURDATE() AND active_until IS NOT NULL)