mysql进行模糊查询时,基本都是LIKE "%sss%",有时候这种查询时准确的,但是有种情况这种查询会出现很大问题。

看一下下面这张表

mysql模糊查询1,11,111用逗号(其他符号)拼接的相似字符串

如果想查询字段test包含1的数据,一般我们会用常规方式查询,如下:

SELECT * FROM c_test WHERE test LIKE "%1%"

但是查询结果不尽人意,如下:

mysql模糊查询1,11,111用逗号(其他符号)拼接的相似字符串

 

不仅把包含1的查出来了,包含11,110的都查询出来了,这并不是我们想要的结果,因为我们只想要id为1的数据

此时,sql就有了大问题,我们可以做如下修改,将test字段值的两端都加上英文逗号,然后再LIKE查询,就不会有这种问题了,

sql如下:

SELECT * FROM c_test WHERE CONCAT(",",test,",") LIKE "%,1,%"

此时的查询结果如下:

mysql模糊查询1,11,111用逗号(其他符号)拼接的相似字符串

这才是我们想要的结果。

还有一种方式,用mysql函数FIND_IN_SET(str,strlist)

 sql如下:

SELECT * FROM c_test WHERE FIND_IN_SET("1",test)

mysql模糊查询1,11,111用逗号(其他符号)拼接的相似字符串

 

 但是这种方式只适用于用逗号隔开的字符串,使用时要注意一下