1

MySQL を使用して、「LIKE '%closed%'」に似たものを「NOT IN()」関数で使用する方法はありますか?

エンド ユーザーが作業指示書に対して独自の「クローズ」ステータスを指定できるようにするテーブルにデータがあります。一部のユーザーは、次のように自分のステータスを書き込みます。

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

ご覧のとおり、「3-Closed」というステータスがあります。「クローズ」と見なされないすべてのレコードを収集しようとしていますが、この「3-クローズ」は以下の「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

と同じ構文ではありませんが、これを行うことINREGEXPできます。単一の比較の場合:

NOT REGEXP 'closed'

多重比較の場合 (つまり、「foo」または「bar」のいずれも含まないものと一致します。

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

それを行う方法はありません。IN 関数は完全一致を取ります。

NOT LIKE を使用できます。

クエリを作成するより良い方法は、データを再構築することです。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 に答える