gpt4 book ai didi

MySQL WHERE 子句构造问题

转载 作者:行者123 更新时间:2023-11-29 08:50:27 25 4
gpt4 key购买 nike

我用它来按 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

也不起作用。

最佳答案

假设您有这样的数据记录:

ID    ProgramCode
1 WH1
2 WH15

并且您想要过滤与 WH1 匹配的记录。如果您使用此查询:

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

你实质上是在说:

Select records where ProgramCode is in the following string: '|A0|WH15|'

由于 'WH1' 位于 'WH15' 中,因此您会得到误报。

您最好使用 WHERE IN 构造,如下所示:

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

这意味着:

Select records where ProgramCode (in its entirety) is in the following set of strings: 'A0', 'WH15'

如果您的过滤条件作为管道分隔字符串传递,则需要首先解析它,以便为 IN 参数设置正确的数据集。

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

关于MySQL WHERE 子句构造问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com