我正在尝试编写一个Query来查找字符串是否包含Column中值的一部分(不要与查询混淆以查找列是否包含字符串的一部分)。比方说,我在表格中有一列值为ABC,XYZ。如果我给出搜索字符串ABCDEFG,那么我希望显示带有ABC的行。如果我的搜索字符串是XYZDSDS,则应显示值为XYZ的行
答案 0 :(得分:15)
答案是"使用LIKE"。
请参阅文档:https://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
您可以执行WHERE 'string' LIKE CONCAT(column , '%')
因此查询变为:
select * from t1 where 'ABCDEFG' LIKE CONCAT(column1,'%');
如果您需要匹配字符串中的任何位置:
select * from t1 where 'ABCDEFG' LIKE CONCAT('%',column1,'%');
在这里你可以看到它在一个小提琴中工作: http://sqlfiddle.com/#!9/d1596/4
答案 1 :(得分:4)
Select * from table where @param like '%' + col + '%'
答案 2 :(得分:3)
首先,您似乎在列中存储事物列表。这是在数据库中存储值的错误方法。您应该有一个联结表,每个实体和值都有一行 - 也就是说,示例中为ABC
和XYZ
的单独行。 SQL具有用于存储列表的出色数据结构。它被称为“表”,而不是“字符串”。
如果你坚持使用这种格式并使用MySQL,那么有一个功能可以提供帮助:
where find_in_set('ABC', col)
MySQL将逗号分隔的字符串视为“set”并提供此功能。但是,此功能无法使用索引,因此效率不高。我是否提到你应该使用联结表?