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,每个实体和值一行——也就是说,在您的示例中,ABCXYZ 单独一行。 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