MySQL提供了一个名为FIND_IN_SET()的内建字串函式,允许您在逗号分隔的字串列表中查询指定字串的位置。
第二个引数haystack是要搜寻的逗号分隔的字串列表。
FIND_IN_SET()函式根据引数的值返回一个整数或一个NULL值:
如果needle或haystack为NULL,则函式返回NULL值。
如果needle不在haystack中,或者haystack是空字串,则返回零。
如果needle在haystack中,则返回一个正整数。
请注意,如果needle包含逗号(,),该函式将无法正常工作。 此外,如果needle是一个常数字串,而且haystack是一个型别为SET的列,MySQL将使用位算术优化。
下面让我们举一些例子来了解和学习MySQL FIND_IN_SET的工作原理。
以下语句返回2,因为字元'y'是'x,y,z'字串中的第二个位置。
以下语句也返回0,因为第二个引数是一个空字串。
以下语句返回NULL,因为第一个引数为NULL。
以下语句也返回NULL,因为第二个引数为NULL。
+-----------------------+
为了演示目的,这里将建立一个名为divisions的新表。
第三,要井底接受red皮带的部门,可以使用FIND_IN_SET函式,如下所示:
因为FIND_IN_SET()函式在第二个引数中找不到第一个引数时返回0。 因此,您可以使用NOT运算子来否定FIND_IN_SET()函式返回的结果值。
例如,要找到不接受黑(black)皮带的部门,请使用以下语句:
IN运算子确定值是否匹配指定值列表。 例如,要查询名称为O-1或O-2的部门,请按如下所示使用IN运算子。
可以使用FIND_IN_SET函式获得与上面查询相同的结果:
IN运算子可以接受任意数量的引数,每个引数用逗号分隔。 但是,FIND_IN_SET函式只有两个引数。
当您希望将值与数据库中的值列表进行匹配时,可以使用IN运算子。 并且当希望将值与数据库中以逗号分隔储存的值列表进行匹配时,可以使用FIND_IN_SET函式。
在本教学中,您已经学习了如何使用FIND_IN_SET函式查询在以逗号分隔的字串列表中的某个字串。