代码之家  ›  专栏  ›  技术社区  ›  Harshwardhan Sharma

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

  •  -1
  • Harshwardhan Sharma  · 技术社区  · 6 年前

    我要写一个查询 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;
    

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

    有没有办法在MySQL中得到这个输出?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Mureinik    6 年前

    你可以用逻辑 or 操作员:

    SELECT *
    FROM   post
    WHERE  valid_month = '' OR valid_month REGEXP '[[:<:]]3[[:>:]]';
    
        2
  •  0
  •   Vidhyut Pandya    6 年前

    CASE

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