2-8REGEXP运算符–正则表达式-SQL
第一个例子
当想查询表customers中的last_name中有field的数据,代码如下
SELECT*FROMcustomersWHERElast_nameLIKE'%field%'
MySql中还有另外一个运算符,REGEXP
是正则表达式(regularexpression)的缩写.正则表达式在搜索字符串时非常强大.它允许我们搜索更复杂的模式.
SELECT*FROMcustomersWHERElast_nameREGEXP'field'
我们可以用‘^
’表示字符串的开头,
SELECT*FROMcustomersWHERElast_nameREGEXP'^field'--表示我们的姓氏必须以field开头
我们还用美元符号$
代表字符串末尾,
SELECT*FROMcustomersWHERElast_nameREGEXP'field$'--表示我们的姓氏必须以field结尾
这里可以搜寻多个单词,比如,假设我们想查询一些顾客,他们姓氏包含field
或者mac
,我们使用|
并输入另外一个模式.可以使用多个|
表示多个搜寻模式.
SELECT*FROMcustomersWHERElast_nameREGEXP'field|mac'--表示姓氏中包含field或者mac
当有下面情况,表示
SELECT*FROMcustomersWHERElast_nameREGEXP'^field|mac|rose'--表示查询以field开头的姓氏或者姓氏中含有mac或者姓氏中含有rose
SELECT*FROMcustomersWHERElast_nameREGEXP'field$|mac|rose'--表示查询以field结尾的姓氏或者姓氏中含有mac或者姓氏中含有rose
第二个例子
假设你想搜寻姓氏里有e
的顾客,如果你想要确保在e
前要有g
或者i
两者之一,这时需要用到方括号[]
,在括号里加上多个字母,比如gim,对应了任何姓氏里有ge
或者ie
或者me
的顾客.
SELECT*FROMcustomersWHERElast_nameREGEXP'[gim]e'--方括号[]可以放到e前面,也可以放到e后面
可以用‘[a-h]e
’表示‘[abcdefg]e
’.
总结:^
beginning$
end|
logicalor[abcd]
使用[]
匹配任意在括号里列举的单字符.a-f
表示[abcdefg]
,-
代表一个范围.
例题
问题:
--Getthecustomerswhose--firstnamesareELKAorAMBUR--lastnamesendwithEYorON--lastnamesstartwithMYorcontainsSE--lastnamescontainBfollowedbyRorU
代码实现:
SELECT*FROMcustomers--WHEREfirst_nameREGEXP'ELKA|AMBUR'--WHERElast_nameREGEXP'EY$|ON$'--WHERElast_nameREGEXP'^MY|SE'WHERElast_nameREGEXP'B[RU]'