业务场景:
在使用MySQL的时候,可能的某个字段存储的是一个英文逗号分割的字符串(这里我们不讨论表设计的合理性),如图所示:
我们在查询的时候需要匹配逗号分割中的某个字符串,该怎么查询呢?
find_in_set函数:
函数结构:find_in_set(str,strlist)
- str:要查询的字符串。
- strlist: 字段名,示例中的 business_line_reviewer 字段。
为了方便理解,我们可以认为strlist是由多个str且以英文逗号分割组成的,函数返回的是str在strlist中的位置,返回值的范围在 1 到 N 之间,需要注意的是strlist不能以英文逗号开头。
find_in_set函数用法演示:
select id,business_line_reviewer from org_performance_approver where find_in_set('zt19379', business_line_reviewer) > 0
查询结果:
完美解决了在查询的时候需要匹配逗号分割中的某个字符串的场景。
索引使用情况:
explain select business_line_reviewer from org_performance_approver where find_in_set('zt19379', business_line_reviewer) > 0;
MySQL版本
select version();
总结:
在查阅资料寻求解决方案的时候,看到部分资料说 find_in_set 函数不支持英文逗号分割 ,我使用的 8.0.27 版本是支持的,可能是老版本不支持,这个待求证,也有资料 find_in_set 函数说不支持索引,同样我在使用的时候看了执行计划,也是支持索引的,可能也是老版本不支持。
如有不正确的地方请各位指出纠正。