是否可以在NOT IN()中使用%运算符来查找单词部分而不是精确短语?

时间:2013-09-19 21:11:00

标签: mysql

使用MySQL,有没有办法使用类似于“LIKE'%closed%'但在”NOT IN()“函数中使用的东西?

我在表格中有数据,允许最终用户为工单指定自己的“已关闭”状态。一些用户按如下方式编写自己的状态:

Closed
Pending Approval
1-Open
3-Closed
2-In progress
Pending

如您所见,我的状态称为“3-Closed”。我正在尝试收集所有不被视为“已关闭”的记录,但这个“3-Closed”将不适用于我的“NOT IN()”sql以下。

SELECT * FROM my_table WHERE
    p_wo_status_cat_id IN 
             (
              SELECT b1.p_wo_status_cat_id 
              FROM p_status_list b1 
              WHERE LOWER(b1.name) NOT IN('completed','finished','done','closed')

              )

有没有办法做这样的事情:

NOT IN ('%closed%')

所以它会选择“关闭”这个词的任何差异吗?

提前致谢。

2 个答案:

答案 0 :(得分:4)

使用与IN相同的语法,但REGEXP可以执行此操作。对于单一比较:

NOT REGEXP 'closed'

进行多重比较(即匹配任何不包含“foo”或“bar”的内容:

NOT REGEXP '(foo|bar)'

答案 1 :(得分:0)

没有办法做到这一点。 IN功能需要完全匹配。

你可以使用NOT LIKE。

编写查询的更好方法可能是重构数据。添加一个列为is_closed或is_closing_statment的列。然后1意味着这个词关闭了问题,您可以重写您的查询,只获得关闭问题的staments。使用您的示例数据:

Closed                 1
Pending Approval       0
1-Open                 0
3-Closed               1
2-In progress          0
Pending                0

然后,您过滤到关闭并将结果限制为具有该状态的问题的状态。