关于mysql字符串(精确|模糊)查询是否包含某个字符串问题

最近在工作中,遇到数据库数据需要保存多个的字符串类型的问题,例如"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(字段,字符)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值