天天看點

MySql模糊查詢like通配符簡介

%代表随意多個字元  _代表一個字元 在 MySQL中。SQL的模式預設是忽略大寫和小寫的

正則模式使用REGEXP和NOT REGEXP操作符。

“.”比對不論什麼單個的字元。一個字元類

“[...]”比對在方括号内的随意單個字元

“ * ”比對零個或多個在它前面的東西

正則表達式是區分大寫和小寫的。可是假設你希望,你能使用一個字元類比對兩種寫法。

比如。“[aA]”比對小寫或大寫的“a”而“[a-zA-Z]”比對兩種寫法的不論什麼字母。

在模式開始處使用“^”或在模式的結尾用“$”。

為了找出以“三”開頭的名字。使用“^”比對名字的開始。

FROM [user] WHERE u_name REGEXP ‘^三’;

将會把u_name為 “三腳貓”等等以“三”開頭的記錄全找出來。

為了找出以“三”結尾的名字,使用“$”比對名字的結尾。

FROM [user] WHERE u_name REGEXP ‘三$’;

将會把u_name為“張三”。“張貓三”等等以“三”結尾的記錄全找出來。

你也能夠使用“{n}”“反複n次”操作符重寫先前的查詢:

FROM [user] WHERE u_name REGEXP ‘b{2}$’;

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_';   

select * from user where username like 'h_xiao';   

 假設我就真的要查%或者_,怎麼辦呢?使用escape,轉義字元後面的%或_就不作為通配符了,注意前面沒有轉義字元的%和_仍然起通配符作用

select username from gg_user where username like '%xiao/_%' escape '/';   

select username from gg_user where username like '%xiao/%%' escape '/';

二、正則模式

由MySQL提供的模式比對的其它類型是使用擴充正則表達式。當你對這類模式進行比對測試時,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它們是同義詞)。

擴充正則表達式的一些字元是:

“.”比對不論什麼單個的字元。(單位元組字元)

一個字元類“[...]”比對在方括号内的不論什麼字元。

比如,“[abc]”比對“a”、“b”或“c”。

為了命名字元的一個範圍。使用一個“-”。“[a-z]”比對不論什麼小寫字母,而“[0-9]”比對不論什麼數字。

“ * ”比對零個或多個在它前面的東西。比如,“x*”比對不論什麼數量的“x”字元,“[0-9]*”比對的不論什麼數量的數字,而“.*”比對不論什麼數量的不論什麼東西。

正則表達式是區分大寫和小寫的,可是假設你希望。你能使用一個字元類比對兩種寫法。比如。“[aA]”比對小寫或大寫的“a”而“[a-zA-Z]”比對兩種寫法的不論什麼字母。

假設它出如今被測試值的不論什麼地方。模式就比對(僅僅要他們比對整個值。SQL模式比對)。

為了定位一個模式以便它必須比對被測試值的開始或結尾,在模式開始處使用“^”或在模式的結尾用“$”。

為了說明擴充正則表達式怎樣工作,上面所看到的的LIKE查詢在以下使用REGEXP重寫:

将投入u_name至“喬 - 史密斯”。“張貓3”等等。“三”找出在整個記錄的末尾。