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 回答