1

使用 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%')

所以它会发现“关闭”这个词的任何变化?

提前致谢。

4

2 回答 2

4

不使用与 相同的语法IN,但REGEXP可以做到这一点。对于单个比较:

NOT REGEXP 'closed'

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

NOT REGEXP '(foo|bar)'
于 2013-09-19T21:15:20.347 回答
0

没有办法做到这一点。IN 函数采用完全匹配。

您可以使用不喜欢。

编写查询的更好方法可能是重组数据。添加一个表示 is_closed 或 is_closing_statment 的列。然后 1 表示这个词关闭了问题,您可以重写查询以仅获取关闭问题的语句。使用您的样本数据:

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

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

于 2013-09-19T21:19:21.757 回答