0

これを使用して、LocState でレコードをフィルター処理します: (状態は、以下に示すようにパイプで区切られた値として渡されますが、パラメーターになります)

INSTR(CONCAT('|','TX|OH','|'),e.LocState) > 0

しかし...どうすればこのようなもので機能させることができますか?:

INSTR(CONCAT('|','AO|WH15','|'),e.ProgramCode) > 0

また、ProgramCode == 'WH1' にも一致します。

POSITION(e.ProgramCode IN CONCAT('|','AO|WH15','|')) > 0

どちらも機能しません。

4

1 に答える 1

2

次のようなデータ レコードがあるとします。

ID    ProgramCode
1     WH1
2     WH15

そして、一致するレコードをフィルタリングしたいとしますWH1。このクエリを使用している場合:

SELECT *
FROM table
WHERE ProgramCode INSTR(CONCAT('|','AO|WH15','|'),e.ProgramCode) > 0

あなたは本質的に言っています:

ProgramCode が次の文字列にあるレコードを選択します。'|A0|WH15|'

そして、あなたの中にあるので、誤検知'WH1'が発生します。 'WH15'

WHERE IN次のように、コンストラクトを使用することをお勧めします。

SELECT *
FROM table
WHERE ProgramCode IN ('A0', 'WH15');

これの意味は:

ProgramCode (全体) が次の文字列セットにあるレコードを選択します。'A0', 'WH15'

INフィルター条件がパイプ区切りの文字列として渡される場合は、最初にそれを解析して、引数に適切なデータ セットを設定できるようにする必要があります。

MySQL が正規表現をサポートしているため、正規表現の使用にも興味があるかもしれません。

于 2012-07-09T19:58:04.653 に答える