如果值存在于存储的文本字符串中
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。
我有一个 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。