发布时间:2018-01-10 18:50:14编辑:丝画阁阅读(848)
写历史小文章的痛苦在于找不到什么吸睛的题材,而且个人文笔也不够有趣。还是写写我的老本行,内容是一抓一大把呀。下面直接上干货。
我们以前在模糊搜索的时候,大多数运用LIKE写法:
SELE CT `column` FROM `table` where `condition` like`%keyword%'
事实上,可以使用 locate(position) 和 instr这两个函数来代替:
1、LOCATE语句
返回子串 keyword 在字符串 condition 中第一次出现的位置。如果子串 keyword 在 condition 中不存在,返回值为 0:
mysql> SELE CT `column` from `table` where locate(‘keyword’,`condition`)>0
2、POSITION语句(LOCATE 的別名 POSITION)
mysql> SELE CT `column` from `table` where position('keyword' IN `condition`)
3、INSTR语句
mysql> SELE CT `column` from `table` where instr(`condition`,'keyword')>0
locate、position 和 instr 的差別只是参数的位置不同,同时locate多一个起始位置的参数外,两者是一样的。
mysql> SELE CT `column` from `table` where LOCATE(‘bar’, ‘toolbarbar’,5);
-> 8
返回子串 substr 在字符串 str 中的第 pos 位置后第一次出现的位置。
附加一个,我们还可以使用FIND_IN_SET使搜索更加有效率
find_in_set(str1,str2) 函数:返回str2中str1所在的位置索引,其中str2必须以","分割开。
例:sele ct * from `table` where find_in_set('keyword',`condition`)
在mysql中做数据库查询时,需要得到某字段中包含某个值的记录,这时候使用like是不能解决问题的,find_in_set就解决了我们的问题。
表users
==============================
id | level
1 | 1,2,3
2 | 1,25,3
mysql> SELE CT * FROM users WHERE level LIKE '%2%'
上面会把在level字段中含有“2”这个字符的两条结果都查询出来;
mysql> SELE CT * FROM users WHERE find_in_set(2,level)
上面才会得到我们需要的结果;
由此可见:like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询的结果要精准于like。
关键字:
本站部分内容来源网络及网友上传,本站未必能一一鉴别其是否为公共版权或其版权归属,如果您认为侵犯您的权利,本站将表示非常抱歉!
请您速联系本站,本站一经核实,立即删除。删文删帖联系【2789291421@qq.com】