一.举个栗子
1.like
SELECT * FROM user WHERE nick_name like '%单%'
SELECT * FROM user WHERE nick_name like '_单%' //第二个字符是单的数据
SELECT * FROM user WHERE nick_name like '[^派课]单%' //不包含派和课的数据
SELECT * FROM user WHERE nick_name like '[^1-3]单%' //不包含1单,2单,3单的数据
2.instr
SELECT * FROM user WHERE INSTR(nick_name,'单') >0
3.position
SELECT * FROM user WHERE POSITION('单' IN nick_name) >0
4.locate
SELECT * FROM user WHERE LOCATE('单',nick_name) >0
SELECT * FROM user WHERE LOCATE('单',nick_name,4)
5.find_in_set
SELECT * FROM user WHERE FIND_IN_SET('单',nick_name)
二.分析
查询速度上,上面2-5栗子比1快一点
1.INSTR(str,substr)
返回字符串 str 中子字符串的第一个出现位置。这和LOCATE()的双参数形式相同,只是参数的顺序被颠倒。
2.LOCATE(substr,str) , LOCATE(substr,str,pos)
第一个语法返回字符串 str中子字符串substr的第一个出现位置。第二个语法返回字符串str中子字符串substr的第一个出现位置, 起始位置在pos。如若substr 不在str中,则返回值为0。
3.POSITION(substr IN str)
POSITION(substr IN str)是 LOCATE(substr,str)同义词。
4.FIND_IN_SET(str,strlist)
当表中无数据或者列为null时,postion会成立 find_IN_SET 比较严格 如果没有数据 则不成立