mysql模糊查詢like語(yǔ)句 mysqllike通配符escape什么意思?
mysqllike通配符escape什么意思?MySql的like語(yǔ)句中的通配符:百分號(hào)、下劃線和escape %:表示任意個(gè)或多個(gè)字符。可匹配任意類(lèi)型和長(zhǎng)度的字符。Sql代碼select * fro
mysqllike通配符escape什么意思?
MySql的like語(yǔ)句中的通配符:百分號(hào)、下劃線和escape %:表示任意個(gè)或多個(gè)字符??善ヅ淙我忸?lèi)型和長(zhǎng)度的字符。Sql代碼select * from user where username like "%huxiao" select * from user where username like "huxiao%" select * from user where username like "%huxiao%" 另外,如果需要找出u_name中既有“三”又有“貓”的記錄,請(qǐng)使用and條件SELECT * FROM [user] WHERE u_name LIKE ‘%三%’ AND u_name LIKE ‘%貓%’若使用 SELECT * FROM [user] WHERE u_name LIKE ‘%三%貓%’雖然能搜索出“三腳貓”,但不能搜索出符合條件的“張貓三”。
如何寫(xiě)一個(gè)能匹配字符串的mysql語(yǔ)句?
mysql的字符串匹配
需求表數(shù)據(jù)如下:
Java代碼
mysql> select * from test
---- -------
| id | name |
---- -------
| 1 | abc** |
---- -------
1 row in set (0.00 sec)
我想匹配 abcde,也就是一個(gè)*代表一個(gè)字符
分析:
在正則中*代表0個(gè)或者多個(gè),因此此處的存儲(chǔ)有問(wèn)題,應(yīng)該存儲(chǔ).或者_(dá)那么查詢sql可以通過(guò)like和REGEXP 來(lái)實(shí)現(xiàn)
結(jié)論:
1.采用like
Java代碼
mysql> select * from test where "abcde" like replace(name,"*","_")
---- -------
| id | name |
---- -------
| 1 | abc** |
---- -------
1 row in set (0.01 sec)
先替換成_然后在like 匹配
2.采用REGEXP
Java代碼
mysql> select * from test where "abcde" regexp replace(name,"*",".")
---- -------
| id | name |
---- -------
| 1 | abc** |
---- -------
1 row in set (0.02 sec)
替換成.然后在匹配
MySQL的REGEXP和like在匹配上的區(qū)別?
其中l(wèi)ike要求整個(gè)數(shù)據(jù)都要匹配,而REGEXP只需要部分匹配即可。
也就是說(shuō),用Like,必須這個(gè)字段的所有內(nèi)容滿足條件,而REGEXP只需要有任何一個(gè)片段滿足即可。MySQL數(shù)據(jù)庫(kù)在索引條件相同的情況下,正則和LIKE模糊匹配,誰(shuí)的效率,更好?一般用哪個(gè)?
在索引相同情況下,效率差不多。不過(guò)還要經(jīng)過(guò)嚴(yán)格測(cè)試才能知道答案。說(shuō)實(shí)話,這兩個(gè)方法效率都不高,原因是使用正則或者like時(shí),一般情況下,索引會(huì)失效。建議使用全文索引。