先看MySQL手册中find_in_set函数的语法:
FIND_IN_SET(str,strlist)
假如字符串str 在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
使用方法如下:
SELECT
t.id,
t.type_ids,
FIND_IN_SET(
"4",
REPLACE (t.type_ids, ";", ",")
) index_
FROM
common_error_detail t
WHERE
FIND_IN_SET(
"4",
REPLACE (t.type_ids, ";", ",")
)
查询结果如下:
需要注意的是,strlist一定是个以逗号隔开的字符串,如果是以其他字符串隔开的,可以先使用REPLACE将特殊字符替换成逗号
FIND_IN_SET的返回值是要查找的字符串在字符串列表中的位置,从1开始计算