首页 > 解决方案 > 如果字段不为空,MySQL 添加 where 子句

问题描述

我有一张news桌子,我想news通过按列过滤来获取所有已开始但尚未结束的start_at& end_at

"select * from `news` where `start_at` <= NOW() and `end_at` >= NOW()"

或者就像我在 Laravel 中所做的那样:

$news = News::where("start_at", '<=', date("Y-m-d"))
            ->where("end_at", '>=', date("Y-m-d"))->get();

但是如果列是 NULL,我也想忽略按列过滤end_at,所以如果列是 NULL,我希望显示结果,就好像我只使用了这个查询一样:

"select * from `news` where `start_at` <= NOW()"

提前致谢。

标签: mysqllaravel

解决方案


只需使用 AND/OR 逻辑运算符以及IS NULL比较运算符。MySQL中的查询如下:

SELECT * FROM news 
WHERE start_at <= NOW() AND 
      (end_at >= NOW() OR end_at IS NULL)

推荐阅读