SQL - 查询字符串是否包含 Column 中的部分值
SQL - Query to find if a string contains part of the value in Column
我正在尝试编写一个查询来查找字符串是否包含列中值的一部分(不要与查找列是否包含字符串的一部分的查询混淆)。
例如,我在 table 中有一列的值为
ABC,XYZ
如果我给搜索字符串
ABCDEFG
那么我想要显示 ABC 的行。
如果我的搜索字符串是 XYZDSDS 那么应该显示值为 XYZ 的行
Select * from table where @param like '%' + col + '%'
首先,您似乎将事物列表存储在一列中。这是在数据库中存储值的错误方法。您应该有一个联结 table,每个实体和值一行——也就是说,在您的示例中,ABC
和 XYZ
单独一行。 SQL 有一个很好的存储列表的数据结构。它被称为 "table",而不是 "string"。
如果您受困于这种格式并使用 MySQL,有一个函数可以提供帮助:
where find_in_set('ABC', col)
MySQL 将逗号分隔的字符串视为 "set" 并提供此功能。但是这个函数不能使用索引,效率不是特别高。我有没有提到您应该改用连接点 table?
答案是 "use 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,'%');
在这里您可以看到它在 fiddle 中工作:
http://sqlfiddle.com/#!9/d1596/4
我正在尝试编写一个查询来查找字符串是否包含列中值的一部分(不要与查找列是否包含字符串的一部分的查询混淆)。
例如,我在 table 中有一列的值为
ABC,XYZ
如果我给搜索字符串
ABCDEFG
那么我想要显示 ABC 的行。
如果我的搜索字符串是 XYZDSDS 那么应该显示值为 XYZ 的行
Select * from table where @param like '%' + col + '%'
首先,您似乎将事物列表存储在一列中。这是在数据库中存储值的错误方法。您应该有一个联结 table,每个实体和值一行——也就是说,在您的示例中,ABC
和 XYZ
单独一行。 SQL 有一个很好的存储列表的数据结构。它被称为 "table",而不是 "string"。
如果您受困于这种格式并使用 MySQL,有一个函数可以提供帮助:
where find_in_set('ABC', col)
MySQL 将逗号分隔的字符串视为 "set" 并提供此功能。但是这个函数不能使用索引,效率不是特别高。我有没有提到您应该改用连接点 table?
答案是 "use 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,'%');
在这里您可以看到它在 fiddle 中工作: http://sqlfiddle.com/#!9/d1596/4