常用的一共有4个方法,如下:
1.使用locate()方法
普通用法:
SELECT`column`from`table`wherelocate('keyword',`condition`)>0
类似于java的indexOf();
不过locate()只要找到返回的结果都大于0(即使是查询的内容就是最开始部分),没有查找到才返回0;
指定起始位置:
SELECT LOCATE('bar','foobarbar',5);
(从foobarbar的第五个位置开始查找)
2.使用instr()函数(据说是locate()的别名函数)
SELECT `column` from `table` where instr(`condition`,‘keyword')>0
唯一不同的是查询内容的位置不同
3.使用position()方法,(据说也是locate()方法的别名函数,功能一样)
SELECT `column` from `table` where position(‘keyword' IN `condition`)
不过它不再是通过返回值来判断,而是使用关键字in
4.使用find_in_set()函数
如:find_in_set(str,strlist),strlist必须要是以逗号分隔的字符串
如果字符串str是在的strlist组成的N子串的字符串列表,返回值的范围为1到N
SQL>SELECTFIND_IN_SET('b','a,b,c,d');---------------------------------------------------------+|SELECTFIND_IN_SET('b','a,b,c,d')|---------------------------------------------------------+|2|---------------------------------------------------------+1rowinset(0.00sec) |
总结:locate、position和instr的差別只是参数的位置不同,同时locate多一个起始位置的参数外,两者是一样的。
find_in_set()比较特殊,但它们都是返回要查找的子字符串在指定字符串中的位置。
速度上前3个要比用like稍快一点。(不过这四个函数都不能使用索引)
下面为再为大家介绍一下Mysql中Like的使用方法
MySQL的like语句中的通配符:百分号、下划线和escape
%:表示任意个或多个字符。可匹配任意类型和长度的字符。
Sql代码
select * from user where username like '%huxiao';
select * from user where username like 'huxiao%';
select * from user where username like '%huxiao%';
另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE ‘%三%' AND u_name LIKE ‘%猫%'
若使用 SELECT * FROM [user] WHERE u_name LIKE ‘%三%猫%'
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)
Sql代码
select * from user where username like '_';
select * from user where username like 'huxia_';
新闻热点
疑难解答