Mysql| 使用通配符進(jìn)行模糊查詢(xún)?cè)斀?like,%,_)
通配符的分類(lèi):
%百分號(hào)通配符: 表示任何字符出現(xiàn)任意次數(shù) (可以是0次).
_下劃線(xiàn)通配符:表示只能匹配單個(gè)字符,不能多也不能少,就是一個(gè)字符.
like操作符:
LIKE作用是指示mysql后面的搜索模式是利用通配符而不是直接相等匹配進(jìn)行比較.
注意: 如果在使用like操作符時(shí),后面的沒(méi)有使用通用匹配符效果是和=一致的,SELECT * FROM products WHERE products.prod_name like '1000';只能匹配的結(jié)果為1000,而不能匹配像JetPack 1000這樣的結(jié)果.
1)%通配符使用:
匹配以"yves"開(kāi)頭的記錄:(包括記錄"yves")
SELECT * FROM products WHERE products.prod_name like 'yves%';
匹配包含"yves"的記錄(包括記錄"yves")
SELECT * FROM products WHERE products.prod_name like '%yves%';
匹配以"yves"結(jié)尾的記錄(包括記錄"yves",不包括記錄"yves ",也就是yves后面有空格的記錄,這里需要注意)
SELECT * FROM products WHERE products.prod_name like '%yves';
2)_通配符使用:
SELECT * FROM products WHERE products.prod_name like '_yves';
匹配結(jié)果為: 像"yyves"這樣記錄.
SELECT * FROM products WHERE products.prod_name like 'yves__';
匹配結(jié)果為: 像"yvesHe"這樣的記錄.(一個(gè)下劃線(xiàn)只能匹配一個(gè)字符,不能多也不能少)
注意事項(xiàng):
注意大小寫(xiě),在使用模糊匹配時(shí),也就是匹配文本時(shí),mysql是可能區(qū)分大小的,也可能是不區(qū)分大小寫(xiě)的,這個(gè)結(jié)果是取決于用戶(hù)對(duì)MySQL的配置方式.如果是區(qū)分大小寫(xiě),那么像YvesHe這樣記錄是不能被"yves__"這樣的匹配條件匹配的.
注意尾部空格,"%yves"是不能匹配"heyves "這樣的記錄的.
注意NULL,%通配符可以匹配任意字符,但是不能匹配N(xiāo)ULL,也就是說(shuō)SELECT * FROM products WHERE products.prod_name like '%';是匹配不到products.prod_name為NULL的的記錄.
技巧與建議:
正如所見(jiàn), MySQL的通配符很有用。但這種功能是有代價(jià)的:通配符搜索的處理一般要比前面討論的其他搜索所花時(shí)間更長(zhǎng)。這里給出一些使用通配符要記住的技巧。
不要過(guò)度使用通配符。如果其他操作符能達(dá)到相同的目的,應(yīng)該 使用其他操作符。
在確實(shí)需要使用通配符時(shí),除非絕對(duì)有必要,否則不要把它們用 在搜索模式的開(kāi)始處。把通配符置于搜索模式的開(kāi)始處,搜索起 來(lái)是最慢的。
仔細(xì)注意通配符的位置。如果放錯(cuò)地方,可能不會(huì)返回想要的數(shù).
補(bǔ)充知識(shí):MySQL LIKE模糊查詢(xún) % _ 通配符會(huì)查詢(xún)出所有數(shù)據(jù)
最近寫(xiě)了一批分頁(yè)查詢(xún) 測(cè)試查詢(xún)出用 _ % 這兩個(gè)特殊字符會(huì)查詢(xún)出所有數(shù)據(jù) 查詢(xún)條件不起作用 結(jié)果不是測(cè)試想要的
后來(lái)發(fā)現(xiàn)這兩個(gè)特殊字符在sql like查詢(xún) 中是通配符 可以代表任意字符
最后想出了2種解決方案
1. 轉(zhuǎn)義 這兩個(gè)特殊字符 就可以實(shí)現(xiàn)
2.使用內(nèi)部函數(shù)INSTR,代替?zhèn)鹘y(tǒng)的LIKE方式查詢(xún),并且速度更快。
INSTR()函數(shù)返回字符串中子字符串第一次出現(xiàn)的位置。如果在str中找不到子字符串,則INSTR()函數(shù)返回零(0)。
下面說(shuō)明了INSTR函數(shù)的語(yǔ)法。
select * from user where INSTR(name,'小明');
以上這篇Mysql| 使用通配符進(jìn)行模糊查詢(xún)?cè)斀?like,%,_)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談mysql密碼遺忘和登陸報(bào)錯(cuò)的問(wèn)題
下面小編就為大家?guī)?lái)一篇淺談mysql密碼遺忘和登陸報(bào)錯(cuò)的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03MySQL與PHP的基礎(chǔ)與應(yīng)用專(zhuān)題之?dāng)?shù)據(jù)查詢(xún)
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL?AB?公司開(kāi)發(fā),屬于?Oracle?旗下產(chǎn)品。MySQL?是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,本系列將帶你掌握php與mysql的基礎(chǔ)應(yīng)用,本篇從數(shù)據(jù)的查詢(xún)開(kāi)始2022-02-02Navicat連接mysql報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了Navicat連接mysql報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09MySQL事務(wù)與隔離級(jí)別的使用基礎(chǔ)理論
這篇文章主要介紹了MySQL事務(wù)的隔離級(jí)別詳情,事務(wù)隔離級(jí)別越高,為避免沖突所花費(fèi)的性能也就越多,即效率低。在“可重復(fù)讀”級(jí)別,實(shí)際上可以解決部分的虛讀問(wèn)題,但是不能防止update更新產(chǎn)生的虛讀問(wèn)題,要禁止虛讀產(chǎn)生,還是需要設(shè)置串行化隔離級(jí)別2023-02-02MySQL數(shù)據(jù)庫(kù)索引order?by排序精講
我們今天說(shuō)的并不是大數(shù)據(jù)下該如何優(yōu)雅的排序,如何提升排序性能的問(wèn)題,我們來(lái)仔細(xì)分析說(shuō)一說(shuō)MySQL中的排序問(wèn)題,希望可以對(duì)正在閱讀的同學(xué)們有所啟迪幫助2021-11-11MySQL實(shí)現(xiàn)用逗號(hào)進(jìn)行拼接、以逗號(hào)進(jìn)行分割
這篇文章主要介紹了MySQL實(shí)現(xiàn)用逗號(hào)進(jìn)行拼接、以逗號(hào)進(jìn)行分割問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12MySQL參數(shù)lower_case_table_name的實(shí)現(xiàn)
lower_case_table_names是一個(gè)重要的系統(tǒng)變量,它影響著MySQL如何處理表名的大小寫(xiě),本文主要介紹了MySQL參數(shù)lower_case_table_name的實(shí)現(xiàn),感興趣的可以了解一下2024-08-08