如果值存在于存储的文本字符串中

If value is present in stored text string

我有一个 table,其中一列包含文本值,其中一些是逗号分隔的字符串,如下所示:

Downtown, Market District, Warehouse District

我需要修改查询以查看给定值是否与此列匹配。我决定使用 IN() 是最好的选择。

SELECT * 
FROM t1
WHERE myValue IN (t1.nighborhood)

我得到的结果参差不齐 - 有时我 return 记录,有时不记录。如果 t1.nighborhood 中有一个值与 myValue 匹配,我会得到数据。

我检查了一下,没有 MySQL 错误。我错过了什么?

您可以使用 FIND_IN_SET() 搜索以逗号分隔的列表:

SELECT * 
FROM t1
WHERE FIND_IN_SET(myValue, REPLACE(t1.nighborhood, ', ', ','));

REPLACE() 是删除多余空格所必需的。

另一个解决方案是使用正则表达式来匹配您的搜索值,必要时用逗号括起来:

SELECT * 
FROM t1
WHERE t1.nighborhood REGEXP CONCAT('(^|, )', myValue, '(, |$)');

一般来说,将不同的值存储在单个列中是糟糕的设计。数据应该规范化成一个有外键的相关table。