简言:今天公司数据库里面有个列是多个数据拼接而成的比如:**“,131113,749932833,749932825,749932826,749932827,749932828,749932829,”**想要通过sql 查找749932833值的列,很多同学第一想到的就是like 模糊匹配,模糊匹配不能保证数据的查询的准确性,后来查了下api 可以使用函数 FIND_IN_SET 完成相应查找。
首先来个需求;需要通过表tb_channel_page_config 查询channels列包含74991358记录。
1 使用like 模糊匹配是可以查到数据
但是这种情况下会出现数据不准确的问题。
比如修改channels 字段数据:,74991380,749913581,74991361,74991378,
会发现上面的sql 也可以查出相关记录,这种情况下数据是不够准确的存在一定数据误差。
然后,我们的主角进来了,FIND_IN_SET 函数。
-
先对FIND_IN_SET 函数用法做个介绍。
FIND_IN_SET 函数来判断一个逗号分隔的字符串列表中是否包含某个特定的值。假设您的数据存储在某个表的某一列中,您可以使用以下 SQL 语句来进行判断: -
用法
SELECT * FROM `tb_channel_page_config` where FIND_IN_SET('74991358',CHANNELS)>0
执行完结果:
也是可以得到我们想要效果。
再试下修改数据后参考like模糊匹配数据
最后得到的结果是查询匹配不到数据,这里就不给结果,感兴趣的同学可以自己手动试下,增加函数理解度。
3)总结
1.FIND_IN_SET(‘74991358’, CHANNELS) 函数返回一个值,表示 ‘74991358’ 在 CHANNELS中的位置,如果找不到则返回 0。
2.WHERE FIND_IN_SETFIND_IN_SET(‘74991358’, CHANNELS) > 0 条件用来筛选出 CHANNELS中包含 ‘74991358’ 的所有行。
通过这种方法,您可以方便地判断一个逗号分隔的字符串列表中是否包含某个特定的值。
学习完快去试下吧,希望对你有帮助。