Mysql中Regexp常見用法


Mysql中Regexp常見用法

模糊匹配,包含特定字符串
# 查找content字段中包含“車友俱樂部”的記錄

select * from club_content where content regexp '車友俱樂部'

# 此時的regexp與like的以下用法是等同的

select * from club_content where content like '%車友俱樂部%'

模糊匹配,以特定字符串開頭
# 查找content字段中以“車友”開頭的記錄

select * from club_content where content regexp '^車友'

# 此時的regexp與like的以下用法是等同的

select * from club_content where content like '車友%'

模糊匹配,以特定字符串結尾
# 查找content字段中以“車友”結尾的記錄

select * from club_content where content regexp '車友$'

# 此時的regexp與like的以下用法是等同的

select * from club_content where content like '%車友'

模糊匹配,或關系
# 查找content字段中包含“心得”、“分享”或“技術貼”

select * from club_content where content REGEXP '心得|分享|技術貼'

模糊匹配,不包含單個字符
# 查找content字段中不包含“車”字、“友”字的記錄

select * from club_content where content REGEXP [^車友]

這個結果跑出來一看大吃一驚,竟然把所有記錄給跑出來,這是為什么呢?
因為一旦加了這個方括號"[]",它就把里面的內容拆成單個的字符再匹配,它會逐個字符去匹配判斷是不是等於“車”,或者是不是等於“友“,返回的結果是一組0、1的邏輯值。

如果想匹配不包含特定字符串,該怎么實現呢?

模糊匹配,不包含特定字符串
# 查找content字段不包含“車友”字符串的記錄

select * from club_content where content not REGEXP '車友'

MySql REGEXP運算符匹配字符串

1 ^ 匹配以該字符后面的字符開頭的字符串
舉個例子: REGEXP ‘^x' 表示匹配以x開頭的字符
2 $匹配以該字符前面的字符結尾的字符串
舉個例子: REGEXP ‘y$' 表示匹配以y結尾的字符
3 .匹配任意一個字符
4 […]匹配在方括號中的任意一個字符。
如: [1-9] 匹配1到9的數字, [abc]匹配其中任意一個
5 *匹配零個或多個在它前面的字符
如: x* 匹配任何數量的x字符

mysql 如何判斷 "字符串" 是否為 "數字"

這個問題有點怪 ,但很多時候我們會以字符串的形式存儲數字 , 反過來我們用字符串進行數學運算時, 好像也不會出錯 . 除非 , 用作數學運算的字符串不能轉換成數字 .
但是我們改如何判斷字符串是否能轉換成數字呢 ?

采用mysql的 REGEXP運算符 . 怎么用?

{String} REGEXP '[^0-9.]'

前面的字符串是我們要做判斷的, 后面的字符串是mysql的正則表達式,意思是 匹配不是數字或者小數點的字符。

如果String中含有不是0-9之間的數字或者是小數點時,返回true ,反之則返回false。

比如說 :

select ('123a' REGEXP '[^0-9.]'); --‘123a'中含有字符'a' 輸出結果為1 mysql中常量true輸出為1 false輸出為0

注意:如果字符串中有空格,也會匹配到正則表達式,返回1。如果是要去掉兩端的空格,就要將判斷的字符串,就要對字符串使用 trim()函數了。

這個只是REGEXP操作符的簡單應用,REGEXP的詳細應用請參考官方文檔。 

MySQL 正則表達式

在前面的章節我們已經了解到MySQL可以通過 LIKE ...% 來進行模糊匹配。

MySQL 同樣也支持其他正則表達式的匹配, MySQL中使用 REGEXP 操作符來進行正則表達式匹配。

如果您了解PHP或Perl,那么操作起來就非常簡單,因為MySQL的正則表達式匹配與這些腳本的類似。

下表中的正則模式可應用於 REGEXP 操作符中。

 

實例

了解以上的正則需求后,我們就可以根據自己的需求來編寫帶有正則表達式的SQL語句。以下我們將列出幾個小實例(表名:person_tbl )來加深我們的理解:

查找name字段中以'st'為開頭的所有數據:

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

查找name字段中以'ok'為結尾的所有數據:

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

查找name字段中包含'mar'字符串的所有數據:

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

查找name字段中以元音字符開頭或以'ok'字符串結尾的所有數據:

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM