最近在工作中,遇到数据库数据需要保存多个的字符串类型的问题,例如"A1,B1,AB,A1B"。当我们查询数据的时候,需要知道是否字符串包含某个字符串。
规则如下:
目标字符串"A1,B1,AB,A1B" 需要验证的字符串分别为:"A1" "A" "1B"
1.精确匹配
FIND_IN_SET(str,strlist)函数
str :待查询的字符串
strlist :待查找的字段名,字段的值以”,”分隔,如 "A1,B1,AB,A1B"
查询字段(strlist)中包含(str)的结果,返回结果0(未找到)或位置。
返回单条数据
2.模糊匹配
2.1 使用like进行模糊匹配
select * from t1 where t1.strlist like concat('%',str, '%');
返回单条数据
2.2 使用正则
SELECT * FROM demo where CONCAT (',',strlist,',') REGEXP ',(A1|AB),';
返回strlist字段中包含'A1'或'AB'的所有行,多条数据
2.3使用locate(字符,字段名)函数
使用locate(字符,字段名)函数,如果包含,返回>0的数,否则返回0 ,
它的别名是 position in
select * from 表名 where locate(字符,字段) select * from 表名 where position(字符 in 字段);
2.4使用INSTR(字段,字符)
select * from 表名 where INSTR(字段,字符)