查找用字符串输入的MySQL列中的逗号分隔值

时间:2019-05-09 05:12:36

标签: php mysql sql subquery rows

我有一个包含列区域的表。它可能有也可能没有逗号分隔的值。说(北,南,东,西)。我需要拉出包含任何这些值的所有行。 当我搜索East时,它应该给所有包含East值的行。 如果我给East,West,它应该列出所有具有东西方的行 enter image description here

我的输入字符串将是“ East”或“ East,South”或“ East,North,Central”

1 个答案:

答案 0 :(得分:2)

首先,您应该避免将这样的CSV数据存储在SQL表中。此类CSV数据未标准化,通常会在您编写查询时给您带来麻烦。

话虽如此,您可以在此处使用FIND_IN_SET,但必须将CSV区域列表分开。例如,对于East,South,您可以尝试:

SELECT *
FROM yourTable
WHERE
    FIND_IN_SET('East', territory_division) > 0 OR
    FIND_IN_SET('South', territory_division) > 0;

如果您真的想一次搜索CSV输入,我们可以使用REGEXP尝试以下操作:

SELECT *
FROM yourTable
WHERE territory_division REGEXP CONCAT('[[:<:]](', REPLACE('East,South', ',', '|'),
    ')[[:>:]]');

Demo

第二种REGEXP方法使用以下正则表达式模式与territory_division列进行匹配:

\b(East|South)\b

也就是说,它将与EastSouth这两个地区中的任何一个匹配。