今天遇到写功能时遇到一个问题,数据库中的字符串为list形式,多个字符串间逗号隔开
假如此时需要查找该列中包含的‘SSDC1’字段的数据,理论上可以用如下函数
select * from xx where ssdc_code like "%SSDC1%"; select * from xx where locate('SSDC1', ssdc_code); select * from xx where INSTR(ssdc_code,'SSDC1');
但是这样的函数查出来有一个问题,会将包含SSDC1的字段也查出来,例如'SSDC13'
最终发现一个合适的函数是
FIND_IN_SET(str,strlist)
其中str是需要截取的字符串,strlist是一个只能用英文逗号隔开的字符串列,非常适合用来实现上述功能
1 |
|
这样写选出来的ssdc_code中就只包含‘SSDC1’,不会出现包含‘SSDC13’的情况了
因为它判断的是两个逗号之前的字符串是否与给定字符串完全相匹配,不完全相匹配的字段不会被选中