我有一个数据库,有些列包含CA,GB等内容,但有些列包含多个国家/地区代码,例如
US + GB + CA + AU
我只是想知道当我搜索CA或只是GB时,我会做什么样的查询会返回该行,并且不一定是整个包US + GB + CA + AU
确保这有点令人困惑,基本上我只需要根据搜索CA或只是GB等来返回该行。
由于
答案 0 :(得分:4)
使用FIND_IN_SET()
,但您首先需要将+
替换为,
,因为它需要逗号分隔的字符串。即使没有
REPLACE()
,这不会使用countrycodes列上的任何索引。
SELECT * FROM tbl
WHERE FIND_IN_SET('AU', REPLACE(countrycodes, '+', ',')) > 0
然而,正确的长期解决方案是更改数据库结构以将这些国家/地区代码规范化为仅包含两列的表 - 国家/地区代码,以及您尝试的表中相关行的ID现在查询。然后,您可以适当地对列进行索引以提高性能(可能会极大地改进它)。
答案 1 :(得分:3)
我建议像甘草酒说的那样将它标准化。
但使用 SELECT ... WHERE countrycode
LIKE'%GB%'可行。
http://w3schools.com/sql/sql_like.asp
答案 2 :(得分:2)
这不是一个好的解决方案,但您可以使用LIKE进行查询:
SELECT * FROM `table` WHERE `field` LIKE '%+CA+%' OR `field` LIKE 'CA+%' OR `field` LIKE '%+CA' OR `field` = 'CA'
最后两次检查冷杉和最后的值。