mysql数据库的通配符_数据库MySQL通配符与模式匹配正则
表达式
今天⼀个同事说他写了⼀个sql语句查询没有结果,他是这样写的SELECT * FROM Persons WHERE City LIKE '[BLN]%'
那么就再理⼀下:
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 '__';
regexp like
重点在这⾥:
MySQL模式匹配的其他类型是使⽤扩展正则表达式,使⽤REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,之后遇到HIVE可以⾃⼰查下LIKE 、RLIKE)。
扩展正则表达式的⼀些字符是:"."匹配任何单个的字符,⼀个字符类“[...]”匹配⽅括号内的任何字符如,"[abc]" 匹配"a"、"b"或"c"。为了命名字符的⼀个范围,使⽤⼀个连接符"-" 。"[a-z]" 匹配任何⼩写字母,⽽"[0-9]"匹配任何数字。"* "匹配零个或多个在它前⾯的东西。例如,"x*" 匹配任何数量的 "x" 字符,"[0-9]*" 匹配的任何数量的数字,⽽“.*”匹配任何数量的任何字符。
另外,正则表达式是区分⼤⼩写的,当然也可以使⽤⼀个字符类同事匹配⼤⼩写如,"[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}$";

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。