MySQL中使用FIND_IN_SET查找字段中用逗号隔开的数据

2022-05-11 14点热度 0人点赞 0条评论

说明

在设计MySQL表的时候,有时候,为了简化逻辑,在一个字段中,存多个数据我们使用了英文逗号将多个数据都逗号隔开,这也导致了一个问题,在做查询的时候,需要在这个字段下搜索是否含有指定的数据。

例如数据库表中一个字段叫tags,我们多个tag保存的是用逗号隔开的数据,例如一行中还有A,B,C,D,AB,另一行还有D,AB

如果我们直接使用like查询是否还有A,很可能把含有AB的数据行也查出来:

select * from t_table where tags like '%A%';

问题解决

MySQL中提供了一个函数:FIND_IN_SET 可以查找字段中是否还有指定的数据。官方文档请看:https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_find-in-set

find_in_set返回的是逗号隔开的文本中,含有指定字符的下标(注意是以1为基础,就是说如果返回1,就是第1个),如果没有的话,就返回0

例如:

select find_in_set('A', 'A,B,C,D') as result; -- 返回的结果是1
select find_in_set('C', 'A,B,C,D') as result; -- 返回的结果是3
select find_in_set('Z', 'A,B,C,D') as result; -- 返回的结果是0,意思就是找不到

综上,我们改写下最开始要的SQL语句(查找数据行中是否含有指定标签A的记录)

select * from t_table t where find_in_set('A', t.tags);

 

 

 

admin

这个人很懒,什么都没留下

文章评论

*

code