資料庫MySQL 萬用字元與模式比對Regex

來源:互聯網
上載者:User

標籤:資料庫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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.