常用的一共有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_';
新聞熱點
疑難解答