字符串模糊匹配五种方法

字符串模糊匹配五种方法

请尽量在where的字段加上索引

1.Like
语法:

SELECT `column` FROM `table` where `condition` like `keyword%’

一定不要使用`%keyword%’这种写法,会直接进行全表搜索,破坏索引,性能下降
如果需要前后模糊 请用以下三种

2.LOCATE(substr,str) LOCATE(substr,str,pos)
第一个语法返回substr在字符串str 的第一个出现的位置。第二个语法返回子符串 substr 在字符串str,从pos处开始的第一次出现的位置。如果substr 不在str 中,则返回值为0
语法:

SELECT `column` FROM `table` WHERE LOCATE('keyword', `field`)>0

keyword是要搜索的内容,field为被匹配的字段,查询出所有存在keyword的数据

3.POSITION('substr' IN field)
position可以看做是locate的别名,功能跟locate一样
语法:

SELECT `column` FROM `table` WHERE POSITION('keyword' IN `filed`)

4.INSTR(str,'substr')
INSTR可以看做是locate的别名,功能跟locate一样

 SELECT `column` FROM `table` WHERE INSTR(`field`, 'keyword' )>0 

这里还有另外一个拿来做类似in的对立函数功能的字符串匹配函数
主要拿来做匹配filed字段的值为','拼接的值

5.FIND_IN_SET(str1,str2)
str2必须以","分割开
语法

SELECT `column` FROM `table` WHERE FIND_IN_SET('keyword','field');

locate、position 和 instr 的差別只是参数的位置不同,同时locate 多一个起始位置的参数外,两者是一样的。
find_in_set()是个比较特殊的存在,但它们都是返回要查找的子字符串 在 指定字符串中的位置
like可以使用索引,后面四个用不了索引,但是2,3,4的性能要比like好

添加新评论