繁体   English   中英

SQL - 查询以查找字符串是否包含列中的部分值

[英]SQL - Query to find if a string contains part of the value in Column

我正在尝试编写一个查询来查找字符串是否包含列中的部分值(不要与查询混淆以查找列是否包含字符串的一部分)。

举例来说,我在表中有一个带有值的列

ABC,XYZ

如果我给搜索字符串

ABCDEFG

然后我希望显示带有ABC的行。

如果我的搜索字符串是XYZDSDS,那么应该显示值为XYZ的行

答案是“使用 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

Select * from table where @param like '%' + col + '%'

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

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

where find_in_set('ABC', col)

MySQL 将逗号分隔的字符串视为“集合”并提供此功能。 但是这个函数不能使用索引,所以效率不是特别高。 我有没有提到你应该使用联结表?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM