問題背景:我有一列值,存的是逗号隔开的数字,当我输入随意的两个数时,我希望能找到包含我输入的这两个值的所有数据。
如上图,如果我输入8,9或者9,8我希望所有包含8和9且不论二者顺序 如何的数据都能出来,并且我输入9时我不希望19被带出来。
解决办法:正则匹配。
第一步,先把这一列值的前后都拼接上“,”
第二部,使用正则匹配匹配自己想要的值。
SQL如下:
select * from 表名 where CONCAT(',',set_id,',') REGEXP ',(8|9),' ;
其中CONCAT(',',aa.project_sub_id,',')是为了把每一行的数据前后都拼接上逗号,拼上以后可以保证大家 前后都有逗号,然后 就可以利用正则做到精准匹配,不至于输入9把19给带了出来。REGEXP ',(8|9),'是匹配包含8或9的数据