mysql正則表達式用法:判斷字符是不是數字和字母(區分大小寫)


常用方法:摘自https://www.jb51.net/article/180533.htm

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字符

 

select ('123a' REGEXP '[0-9]') 表示是否包含數字字符,1為是,0為否。

select ('123a' REGEXP '[^0-9]') 表示是否包含不是數字的字符,1為是,0為否。(此處運行結果為1,因為a是不含數字)(注意含不是數字!=不含數字)

 

舉例:

一、mysql判斷是不是數字

SELECT '1.1' REGEXP '[0-9.]'

  結果為1表示true 當然也可以使用SELECT '1.1' REGEXP '[^0-9.]',結果為0表示false。

二、mysql判斷是不是包含字母

不區分大小寫:SELECT '1AA' REGEXP '[a-z]'
區分大小寫:SELECT '1AA' REGEXP BINARY '[a-z]'
  或:
SELECT '1AA' REGEXP BINARY '[A-Z]'

結果為1表示true,結果為0表示false。


舉例:篩選名字(@后面且倒數第2位中含有小寫字母)的用戶信息

select distinct id,name,email,created_at
,case when instr(name,'@')<=0 then '未添加賬齡后綴'
when substr(substring_index(name,'@','-1'),1,1) REGEXP BINARY '[a-z]' then '大小寫混用'
else null end as incorrect_type
from `cuishou-db`.users
where (role_id='1' and instr(name,'@')<=0) or substr(substring_index(name,'@','-1'),1,1) REGEXP BINARY '[a-z]'

 
        
 
        
 
       


免責聲明!

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



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