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

wlp8pajw  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(397)

这个问题在这里已经有答案了

在数据库列中存储分隔列表真的那么糟糕吗(10个答案)
两年前关门了。
我必须写一个查询 where 子句应仅在字段值不为空时起作用,否则应获取所有记录。
我有一张table的名字

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;

结果应该是这样的

id    | valid_month | name |
------+-------------+------|
  1   | 1,2,3       | post1|
  3   |             | post3|
  5   |             | post5|
  ----+-------------+------+

有没有办法在mysql中获得这个输出?

js4nwp54

js4nwp541#

你可以通过逻辑推理获得这种行为 or 操作员:

SELECT *
FROM   post
WHERE  valid_month = '' OR valid_month REGEXP '[[:<:]]3[[:>:]]';
3xiyfsfu

3xiyfsfu2#

你可以用 CASE

SELECT *
FROM   post
WHERE (
       CASE WHEN IFNULL(valid_month,'') != '' THEN 
           valid_month REGEXP '[[:<:]]3[[:>:]]' 
       ELSE 1 = 1 
      END);

相关问题