我有一个包含列区域的表。它可能有也可能没有逗号分隔的值。说(北,南,东,西)。我需要拉出包含任何这些值的所有行。 当我搜索East时,它应该给所有包含East值的行。 如果我给East,West,它应该列出所有具有东西方的行
我的输入字符串将是“ East”或“ East,South”或“ East,North,Central”
答案 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', ',', '|'),
')[[:>:]]');
第二种REGEXP
方法使用以下正则表达式模式与territory_division
列进行匹配:
\b(East|South)\b
也就是说,它将与East
或South
这两个地区中的任何一个匹配。