MySQL 添加 where 子句 if 字段不为空

dwi*_*wix 2 mysql laravel

我有一个news表,我想news通过按列 & 进行过滤来start_at获取所有已开始但尚未结束的表end_at

"select * from `news` where `start_at` <= NOW() and `end_at` >= NOW()"
Run Code Online (Sandbox Code Playgroud)

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

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

但如果列为 NULL,我也想忽略按列的过滤end_at,因此如果列为 NULL,我希望显示结果,就好像我只使用此查询一样:

"select * from `news` where `start_at` <= NOW()"
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Mad*_*iya 5

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

SELECT * FROM news 
WHERE start_at <= NOW() AND 
      (end_at >= NOW() OR end_at IS NULL)
Run Code Online (Sandbox Code Playgroud)