比如我们的数据库中有一个表A,表中有以下字段及数据
其中area_id中存的是一串【用逗号隔开的各个省id】的字符,现在我们想做这样一件事,我们要把area_id中包含省id为4的那条数据找出来。
怎么找?
select * from A where area_id '%4%'?,会发生什么?试试看
从图中可以看出,它把area_id中只要有4的数据都给查出来了,不管是4还是34。但是我们要的是4而不是34。
所以,不管怎么变换like后面单引号里的内容,结果总是不尽人意的,所以,要怎么查?用FIND_IN_SET()函数。
语法:FIND_IN_SET(str,strlist)。
定义:
1. 假如字符串str在由N子链组成的字符串列表strlist中,则返回值的范围在1到N之间。
2. 一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。
3. 如果第一个参数是一个常数字符串,而第二个是typeSET列,则FIND_IN_SET()函数被优化,使用比特计算。
4. 如果str不在strlist或strlist为空字符串,则返回值为0。
5. 如任意一个参数为NULL,则返回值为NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
strlist:一个由英文逗号“,”链接的字符串,例如:"a,b,c,d",该字符串形式上类似于SET类型的值被逗号给链接起来。
示例:SELECT FIND_IN_SET('b','a,b,c,d'); //返回值为2,即第2个值
(注,该定义搬运自https://www.cnblogs.com/mytzq/p/7090197.html)
回归正题,我们这个sql语句怎么写?怎么找出area_id包含4的数据?
应用如下:
释义:从A表中查询数据,条件是area_id中包含4(或者解释为4包含于area_id)中