1.like操作符和百分號通配符
%表示任何字符出現任意次數。
查詢出表TABLE中NAME字段中任意位置包含i的行:
select * from TABLE where NAME like '%i%'
查詢出表TABLE中NAME字段中開頭位置包含i的行:
select * from TABLE where NAME like 'i%'
查詢出表TABLE中NAME字段中結尾位置包含i的行
select * from TABLE where NAME like '%i'
注意:%不能匹配NULL;有一些字段首尾可能會出現空格,為了避免影響匹配結果,可以是同LTrim和RTrim函數去掉首尾的空格。
2.下划線通配符
下划線通配符只代表一個字符。
使用方法和%一樣,比如查詢出表TABLE中NAME為‘AAA’開頭的四個字母的行
select * from TABLE where NAME like 'AAA_'
3.正則表達式
除了使用like進行模糊匹配,還可以使用正則表達式進行模糊匹配。
正則表達式操作符:REGEXP
3.1基本字符匹配
查詢出表TABLE中,字段NAME以A結尾的且只有兩個字母的所有行:
select * from TABLE where NAME regexp '.A'
.是正則表達式的特殊字符,代表匹配任意一個字符。
3.2進行或(OR)匹配
查詢出表TABLE中,字段NAME為AAA或BBB的行:
select * from TABLE where NAME regexp 'AAA|BBB'
|為正則表達式的或操作符。
3.3匹配多個字符
查詢出表TABLE中,字段NAME以A或B或C開頭,且結尾為DD的行:
select * from TABLE where NAME regexp '[ABC]DD'
[ABC]定義一組字符,意思是:匹配A或B或C。
3.4范圍匹配
查詢出表TABLE中,字段NAME以1到9開頭,且結尾為A的行:
select * from TABLE where NAME regexp '[1-9]A'
[1-9]意為:匹配1到9任意數字,[a-z]意為匹配任意字符。
3.5匹配特殊字符
這種問題幾乎在每種語言中都會出現,即需要查詢的內容中包含特殊字符。這時候就需要轉義了。
在mysql中轉義符為\\
查詢出表TABLE中,NAME字段包含.的行:
select * from TABLE where NAME regexp '\\.'
3.6正則表達式常用元字符
注意:正則表達式匹配不區分大小寫,如果需要區分在regexp后面加上關鍵字:binary