%代表随意多個字元 _代表一個字元 在 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”等等。“三”找出在整個記錄的末尾。