Mysql 简明教程
MySQL - Regular Expressions
MySQL 支持各种模式匹配操作,以从大型数据库表中检索筛选结果集。在前面的章节中,我们已经学习过用于模式匹配的 LIKE 运算符。在本章中,我们将看到另一个基于正则表达式的模式匹配操作。
MySQL Regular Expressions
正则表达式松散地定义为一系列字符,这些字符表示输入文本中的一个模式。它用于使用某些模式查找或替换文本字符串;此模式可以是单个字符、多个字符或单词等。
在 MySQL 中,这是一种在数据库中执行复杂搜索操作以检索所需内容的强大方法。与 LIKE 运算符不同,正则表达式不受搜索模式(如 % 和 _)的限制,因为它们使用几个其他元字符来扩展模式匹配中的灵活性和控制。这是使用 REGEXP 运算符执行的。
Patterns used with REGEXP
以下是模式表,可与 REGEXP 运算符一起使用。
Examples
以下示例演示了表中提到的某些模式与 REGEXP 运算符的用法。为此,我们首先创建一个数据库表以执行搜索。
假设我们使用以下查询创建一个名为 CUSTOMERS 的表:
CREATE TABLE CUSTOMERS (
ID INT AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
现在,使用下面给出的 INSERT 语句向其中插入一些值:
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );
执行以下查询以显示上述创建的表中存在的全部记录:
SELECT * FROM CUSTOMERS;
CUSTOMERS 表中存在的记录如下:
REGEXP with Patterns −
现在,我们正在查找 CUSTOMERS 表中所有名称以 'k' 开头的记录:
SELECT * FROM CUSTOMERS WHERE NAME REGEXP '^k';
执行上述查询将产生以下输出:
以下查询检索 CUSTOMERS 表中所有名称以 'sh' 结尾的记录:
SELECT * FROM CUSTOMERS WHERE NAME REGEXP 'sh$';
执行上述查询将产生以下输出:
在此,我们正在检索所有名称包含 'sh' 的记录:
SELECT * FROM CUSTOMERS WHERE NAME REGEXP 'sh';
正如我们看到输出所示,只有两个名称包含“sh”。
在以下查询中,我们正在查找所有以元音开头并以 'ol' 结尾的名称:
SELECT * FROM CUSTOMERS WHERE NAME REGEXP '^[aeiou].*ol$';
它返回一个空集,因为 CUSTOMERS 表中没有任何名称以元音开头并以“ol”结尾。
Empty set (0.00 sec)
以下查询找到 CUSTOMERS 表中所有名称以辅音开头的名称:
SELECT * FROM CUSTOMERS WHERE NAME REGEXP '^[^aeiou]';
执行上述查询将产生以下输出: