SQL-FIND_IN_SET()函数的使用

FIND_IN_SET()函数

有这样的一个使用场景,当我需要从一个表中查询出某列的值符合一个条件集的数据。

如果条件集数量确定的话,可以使用in进行查询,比如说固定条件是3个的时候:

user_name = 杨叶文 or user_name = 刘德华 or user_name = 彭于晏。

1
2
3
select * from user where user_name in ('杨叶文','刘德华','彭于晏');
可以在in(@var1,@var2,@var3)加三个参数,然后按得到的值分别赋给 @var1,@var2,@var3
select * from user where user_name in ( @var1,@var2,select * from user where user_name in ('杨叶文','刘德华','彭于晏');
可以在in(@var1,@var2,@var3)加三个参数,然后按得到的值分别赋给 @var1,@var2,@var3
select * from user where user_name in ( @var1,@var2,@var3);

那么但如果传入的条件集是一个变量的话,传入 in里面的值数量不确定的时候,例如用户这次要查询3个人数据,下次要查询6个人的数据,那么固定参数数量的方法就无法使用了。

当传入一个大小不确定的list集合,或者传入一个长度不一定的字符串,那么in方法就无法使用。

这时可以使用FIND_IN_SET()函数

1
2
3
4
FIND_IN_SET(str,strlist) 
str 要查询的字符串
strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
查询字段(strlist)中包含(str)的结果,返回结果为FIND_IN_SET(str,strlist)
str 要查询的字符串
strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
查询字段(strlist)中包含(str)的结果,返回结果为null或记录

实现:

1
2
select * from user where FIND_IN_SET(user_name,select * from user where FIND_IN_SET(user_name,@nameStr);
nameStr:"杨叶文,刘德华,彭于晏";


SQL-FIND_IN_SET()函数的使用
https://evanyangtobegreatest.github.io/2022/08/23/SQL-FIND-IN-SET()函数的使用/
作者
Evan
发布于
2022年8月23日
许可协议