MySQL WHERE子句构造问题

时间:2012-07-09 19:19:39

标签: mysql where-clause

我使用它来过滤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

也不起作用。

1 个答案:

答案 0 :(得分: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参数设置正确的数据集。

您可能也有兴趣使用regular expressions,因为MySQL支持它们。