標籤:資料庫mysql萬用字元
今天一個同事說他寫了一個sql語句查詢沒有結果,他是這樣寫的
SELECT * FROM Persons WHERE City LIKE ‘[BLN]%‘
650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/8D/46/wKioL1iVZbLhkCD0AAA5aAmd5Mo881.jpg-wh_500x0-wm_3-wmp_4-s_4029323602.jpg" style="float:none;" title="1.jpg" alt="wKioL1iVZbLhkCD0AAA5aAmd5Mo881.jpg-wh_50" />
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/8D/49/wKiom1iVZbXi2R3EAAAfZDEZ4OU985.jpg-wh_500x0-wm_3-wmp_4-s_386410488.jpg" style="float:none;" title="2.jpg" alt="wKiom1iVZbXi2R3EAAAfZDEZ4OU985.jpg-wh_50" />
那麼就再理一下:
SQL萬用字元是使用特殊字元或文法拼字,用來執行模糊搜尋指令的語句。查詢資料庫中的資料時,sql萬用字元可以替代一個或多個字元。使用是必須與 LIKE 運算子一起使用。在SQL中可以使用的萬用字元有:
萬用字元
|
說明 |
% |
替代一個或多個字元 |
- |
僅替代一個字元 |
[charlist] |
字元列中的任何一個字元 |
[^charlist]或[!charlist] |
不在字元列中的任何單一字元 |
"%":匹配任意數目的字元(零個或多個);"_":匹配任何單個字元;
在使用萬用字元時 可以用 LIKE或NOT LIKE 比較操作符,而不能用 = 或 !=
以user表為例:
查詢以a結尾的記錄:select * from user where username like ‘%a‘;
查詢以a開頭的使用者名稱:select * from user where username like ‘a%‘;
查詢不是以a開頭的使用者名稱:select * from user where username like ‘a%‘;
查詢包含a的使用者名稱:select * from user where username like ‘%a%‘;
查詢有兩個字元的使用者名稱:select * from user where username like ‘__‘;
重點在這裡:
MySQL模式比對的其他類型是使用擴充Regex,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,之後遇到HIVE可以自己查下LIKE 、RLIKE)。
擴充Regex的一些字元是:
"." 匹配任何單個的字元,一個字元類“[...]”匹配方括弧內的任何字元如,"[abc]" 匹配"a"、"b"或"c"。為了命名字元的一個範圍,使用一個串連符"-" 。"[a-z]" 匹配任何小寫字母,而"[0-9]"匹配任何數字。
"* " 匹配零個或多個在它前面的東西。例如,"x*" 匹配任何數量的 "x" 字元,"[0-9]*" 匹配的任何數量的數字,而“.*”匹配任何數量的任何字元。
另外,Regex是區分大小寫,當然也可以使用一個字元類同事匹配大小寫如,"[aA]" 匹配小寫或大寫的"a"而"[a-zA-Z]"匹配兩種寫法的任何字母。
為定位一個模式,以便匹配目標值的開始或末尾,在模式開始處使用“^”或在模式的結尾用“$”。 下面是使用REGEXP寫LIKE查詢:
查詢city以 “L”開頭的人資訊,使用“^”匹配名字的開始並且“[lL]”匹配小寫或大寫的“l”
select * from Persons where City REGEXP "^[lL]";
查詢lastname以“sh”結尾的人,使用“$”匹配名字的結尾:
SELECT * FROM Persons WHERE LastName REGEXP "sh$";
查詢lastname包含一個"A"的人,使用“[aA]”匹配小寫或大寫的“a”:
SELECT * FROM Persons WHERE LastName REGEXP "[aA]";
查詢city名恰好包含6個字元的記錄,使用“^”和“$”匹配名字的開始和結尾,和6個“.”執行個體在兩者之間:
SELECT * FROM Persons WHERE city REGEXP "^......$";
也可以使用“{n}”“重複n次”操作符:
SELECT * FROM pet WHERE name REGEXP "^.{6}$";
本文出自 “Datas” 部落格,請務必保留此出處http://datas.blog.51cto.com/10590222/1894921
資料庫MySQL 萬用字元與模式比對Regex