数据库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 ‘__‘;

重点在这里:

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}$";
时间: 2024-10-09 00:20:14

数据库MySQL 通配符与模式匹配正则表达式的相关文章

数据库 : Mysql 1 - 日常应用

#登录MYSQL数据库 MYSQL -u root -p #显示所有数据库 SHOW databases; #显示当前数据库与应用程序间进行了多少条连接 SHOW processlist; #使用某一数据库 USE database; #显示所有表 SHOW tables; #表结构描述 describe DESC table; #筛选表数据 #选择哪些列 SELECT prod_name, prod_price #从哪个表选 FROM products #选择的列做出什么筛选匹配 WHERE

趁一切还来得及【六】数据库MySQL读写分离与主主同步

相思相见知何日?此时此夜难为情.                                                      --[唐]李白 第一章 数据库MySQL主从复制读写分离授权 1.1 主从复制读写分离方案简单分析 ①数据库主从复制搭建之后,因为数据是单向的,因此默认规则就是所有的数据(主从相关收据)写入和更新都在主库上进行操作,避免主从同步的时候造成冲突. ②严格上来讲,从库上的非同步的库写入数据,只要和主库没有关系,也是可以写入的(或者作为主库),但是如果主从都想其中

MySQL 通配符学习小结

MySQL 通配符 SQL的模式匹配同意你使用"_"匹配不论什么单个字符,而"%"匹配随意数目字符(包含零个字符).在 MySQL中,SQL的模式缺省是忽略大写和小写的.以下显示一些样例. 注意在你使用SQL模式时,你不能使用=或!=:而使用LIKE或NOT LIKE比較操作符. 为了找出以"b"开头的名字: mysql> SELECT * FROM pet WHERE name LIKE "b%"; +--------

MySQL 通配符学习总结

MySQL 通配符 SQL您同意使用模式匹配"_"无论单个字符相匹配,和"%"匹配随意数目字符(包含零个字符). 在 MySQL中.SQL的模式缺省是忽略大写和小写的. 以下显示一些样例. 注意在你使用SQL模式时.你不能使用=或!=:而使用LIKE或NOT LIKE比較操作符. 为了找出以"b"开头的名字: mysql> SELECT * FROM pet WHERE name LIKE "b%"; +--------

【传智播客郑州校区】数据库MYSQL笔记详解

第1章 数据库1.1 数据库概述l 什么是数据库数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作.l 什么是数据库管理系统数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立.使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性.用户通过数据库管理系统访问数据库中表内的数据.l 常见的数据库管理系统MYSQL :开源

MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限

1.新建用户 //登录MYSQL@>mysql -u root -p@>密码//创建用户mysql> insert into mysql.user(Host,User,Password) values('localhost','jeecn',password('jeecn'));//刷新系统权限表mysql>flush privileges;这样就创建了一个名为:jeecn  密码为:jeecn  的用户. //退出后登录一下mysql>exit;@>mysql -u

第二百八十五节,MySQL数据库-MySQL函数

MySQL数据库-MySQL函数 1.MySQL内置函数 SELECT执行函数,后面跟要执行的函数 CHAR_LENGTH(str)函数:返回字符串的字符长度 -- CHAR_LENGTH(str)函数:返回字符串的字符长度 SELECT CHAR_LENGTH('欢迎光临'); LENGTH(str)函数:返回字符串的字节长度 -- LENGTH(str)函数:返回字符串的字节长度 SELECT LENGTH('欢迎光临'); CONCAT(str1,str2,...)函数:拼接字符串 --

Java处理数据库Mysql汉字显示乱码问题

问题:在unbuntu用eclipse编写程序的时候,发现存入数据库mysql的汉字都变成了??? 原因:eclipse和mysql的默认编码方式不一致 解决方法:把eclipse和mysql的编码方式都设置为utf8 1.设置mysql默认编码方式为utf8 修改mysql数据库的my.cnf文件,my.cnf文件路径为/etc/mysql/my.cnf 在[client]下面添加 default-character-set = utf8 在[mysqld]下面添加 character-set

Centos7下Gitlab迁移数据库mysql过程

第1章 系统准备 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [[email protected] ~]# uname -r 3.10.0-327.el7.x86_64 1.1添加阿里云的镜像 cd /etc/yum.repos.d #备份原镜像 mv CentOS-Base.repo CentOS-Base.repo.backup     #添加阿里云Base源 wget