Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何仅在值不为空时设置where子句_Mysql_Sql_Select_Where Clause - Fatal编程技术网

Mysql 如何仅在值不为空时设置where子句

Mysql 如何仅在值不为空时设置where子句,mysql,sql,select,where-clause,Mysql,Sql,Select,Where Clause,我必须编写一个查询,其中where子句应该只在字段值不为空时才起作用,否则应该提取所有记录 我有一张桌子的名字 id | valid_month | name | ------+-------------+------| 1 | 1,2,3 | post1| 2 | 1,2 | post2| 3 | | post3| 4 | 2,5 | post4| 5 |

我必须编写一个查询,其中
where
子句应该只在字段值不为空时才起作用,否则应该提取所有记录

我有一张桌子的名字

id    | valid_month | name |
------+-------------+------|
  1   | 1,2,3       | post1|
  2   | 1,2         | post2|
  3   |             | post3|
  4   | 2,5         | post4|
  5   |             | post5|
  ----+-------------+------+
我想要你喜欢的

select * from post where IF(valid_month != "") THEN valid_month REGEXP '[[:<:]]3[[:>:]]' END IF;

有没有办法在MySQL中获得此输出?

您可以使用逻辑
运算符获得此行为:

SELECT *
FROM   post
WHERE  valid_month = '' OR valid_month REGEXP '[[:<:]]3[[:>:]]';
选择*
邮寄
其中valid_month=''或valid_month REGEXP'[[::]]';

您也可以使用
案例

SELECT *
FROM   post
WHERE (
       CASE WHEN IFNULL(valid_month,'') != '' THEN 
           valid_month REGEXP '[[:<:]]3[[:>:]]' 
       ELSE 1 = 1 
      END);
选择*
邮寄
在哪里(
如果IFNULL(有效月份“”)!=“”则为
有效的月注册表“[[::]”
否则1=1
(完),;
SELECT *
FROM   post
WHERE (
       CASE WHEN IFNULL(valid_month,'') != '' THEN 
           valid_month REGEXP '[[:<:]]3[[:>:]]' 
       ELSE 1 = 1 
      END);