Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL-查询字符串是否包含列中的部分值_Mysql_Sql_String_Contains - Fatal编程技术网

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

Mysql SQL-查询字符串是否包含列中的部分值,mysql,sql,string,contains,Mysql,Sql,String,Contains,我试图编写一个查询来查找字符串是否包含列中的部分值,以避免与查找列是否包含字符串部分的查询混淆 比如说,我在一个表中有一列包含值 ABC,XYZ 如果我给搜索字符串 ABCDEFG 然后我希望显示带有ABC的行 如果我的搜索字符串是XYZDSD,那么应该首先显示值为XYZ的行,您似乎正在将内容列表存储在一列中。这是在数据库中存储值的错误方法。您应该有一个连接表,每个实体和值有一行,也就是说,在您的示例中,ABC和XYZ有一个单独的行。SQL有一个很好的数据结构来存储列表。它被称为表,而不是字符串

我试图编写一个查询来查找字符串是否包含列中的部分值,以避免与查找列是否包含字符串部分的查询混淆

比如说,我在一个表中有一列包含值

ABC,XYZ

如果我给搜索字符串

ABCDEFG

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


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

,您似乎正在将内容列表存储在一列中。这是在数据库中存储值的错误方法。您应该有一个连接表,每个实体和值有一行,也就是说,在您的示例中,ABC和XYZ有一个单独的行。SQL有一个很好的数据结构来存储列表。它被称为表,而不是字符串

Select * from table where @param like '%' + col + '%'
如果您坚持使用这种格式并使用MySQL,有一个函数可以帮助您:

where find_in_set('ABC', col)

MySQL将逗号分隔的字符串视为一个集合,并提供此函数。但是,此函数不能使用索引,因此效率不高。我说过你应该使用连接表吗?

答案是像这样使用

请参阅文档:

您可以在“字符串”处执行,如CONCATcolumn“%”

因此,查询变成:

select * from t1 where 'ABCDEFG' LIKE CONCAT(column1,'%');
如果需要匹配字符串中的任意位置:

select * from t1 where 'ABCDEFG' LIKE CONCAT('%',column1,'%');
在这里,您可以看到它在小提琴中工作:

谢谢。这很有帮助。只是一个小小的修改。从@param like“%”| | col | |“%”所在的表中选择*如果我的答案对您有帮助,请向上投票并选择它作为正确答案。这对我不起作用。正确的答案是,这对我也不起作用。当答案需要修改时,为什么要将其设为接受答案@user2354254。请澄清您的问题,并用更多的例子充分说明它应该如何工作。目前有太多的未知数。您的列是否总是包含3个字符?是否可以在匹配字符串中的任何位置进行匹配,而不仅仅是在开始时?如果对column1进行索引,会对性能产生怎样的影响?会慢一点吗?