SQL - 查询字符串是否包含Column中值的一部分的查询

时间:2015-04-01 11:13:04

标签: mysql sql string contains

我正在尝试编写一个Query来查找字符串是否包含Column中值的一部分(不要与查询混淆以查找列是否包含字符串的一部分)。比方说,我在表格中有一列值为ABC,XYZ。如果我给出搜索字符串ABCDEFG,那么我希望显示带有ABC的行。如果我的搜索字符串是XYZDSDS,则应显示值为XYZ的行

3 个答案:

答案 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)

首先,您似乎在列中存储事物列表。这是在数据库中存储值的错误方法。您应该有一个联结表,每个实体和值都有一行 - 也就是说,示例中为ABCXYZ的单独行。 SQL具有用于存储列表的出色数据结构。它被称为“表”,而不是“字符串”。

如果你坚持使用这种格式并使用MySQL,那么有一个功能可以提供帮助:

where find_in_set('ABC', col)

MySQL将逗号分隔的字符串视为“set”并提供此功能。但是,此功能无法使用索引,因此效率不高。我是否提到你应该使用联结表?