Mysql 简明教程

MySQL - REGEXP_SUBSTR() Function

在 MySQL 中,正则表达式用于在搜索操作中筛选和提取与指定模式匹配的数据库表中的记录。

在数据集中检测模式的过程称为模式匹配。每当数据被认为具有相似特征时,这都非常有帮助;在这种情况下,您可能在数据中找到一个模式及其所有出现。模式匹配通常在原始数据上执行,以确保其语法正确。

类似地,在 MySQL 中,执行模式匹配以检查数据是否正确存储。如果没有,则使用正则表达式的函数检测(有时替换)不正确的模式。 regexp_substr() 函数用于从一组数据中检测指定的模式。

MySQL REGEXP_SUBSTR() Function

MySQL regexp_substr() 函数用于在数据库中进行模式匹配。此函数返回与指定模式匹配的字符串的子字符串,如果没有匹配项,或者字符串或模式为空,则返回 NULL。此处,模式被定义为扩展的正则表达式或只是普通字符串。

Syntax

以下是 MySQL regexp_substr() 函数的语法 -

REGEXP_SUBSTR(expr, pattern[, pos[, occurrence[, match_type]]])

Parameters

regexp_substr() 函数采用以下参数值 -

  1. expr: 在其中执行搜索的字符串

  2. pattern: 在字符串中搜索的模式

此方法还接受以下可选参数:

  1. pos: 搜索的起始位置

  2. occurrence: 要替换的匹配项的出现位置。如果省略,则默认为 1,因此它仅检索第一次出现。

  3. match_type: 指定如何执行匹配的字符串。

Example

以下示例显示了使用 SELECT 语句在简单字符串“Welcome To Tutorialspoint!”上使用 MySQL regexp_substr() 函数:

SELECT REGEXP_SUBSTR('Welcome To Tutorialspoint!', 'We') AS RESULT;

执行给定的查询后,输出如下:

如果字符串中不存在模式,则结果返回为 NULL。让我们尝试使用以下查询在同一字符串“Welcome To Tutorialspoint!”中搜索模式“Hi” -

SELECT REGEXP_SUBSTR('Welcome To Tutorialspoint!', 'Hi') AS RESULT;

输出如下:

Example

让我们将 5 作为“pos”参数的值,以便从给定字符串中的第 5 个位置开始搜索;并且由于我们将出现值传递为 2,因此将检索模式“to”在第 5 个位置之后的第二次出现,而不管其大小写如何 -

SELECT REGEXP_SUBSTR('Welcome To Tutorialspoint!', 'To', 5, 2, 'i')
AS RESULT;

Output

当我们执行上述查询时,输出将获得如下:

Example

如果传递给此函数的前两个参数中的任何一个为 NULL,则此函数返回 NULL。在下面的查询中,我们将 NULL 传递给表达式参数。

SELECT REGEXP_SUBSTR(NULL, 'value');

执行给定的程序后,输出如下所示:

在此,我们将 NULL 作为要搜索的模式传递 -

SELECT REGEXP_SUBSTR('Welcome to Tutorialspoint', NULL)
AS Result;

输出如下:

Example

在以下查询中,我们使用 REGEXP_SUBSTR() 函数对名为 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)
);

以下查询将 7 条记录添加到上述创建的表中 -

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 );

执行以下查询以显示 CUSTOMERS 表的所有记录 -

Select * from CUSTOMERS;

以下为 CUSTOMERS 表 −

现在,我们使用 REGEXP_SUBSTR() 函数从以“Ra”开头的 NAME 列值中检索子字符串。

SELECT REGEXP_SUBSTR(NAME, '^Ra') AS RESULT FROM CUSTOMERS;

Output

如我们在下面的输出中看到的,只有 NAME 列中的第一条记录包含子字符串“Ra” -

REGEXP_SUBSTR() Funcion Using a Client Program

我们还可以使用客户端程序执行 MySQL REGEXP_SUBSTR() 函数以从一组数据中检测指定模式。

Syntax

以下是此操作在各种编程语言中的语法 −

Example

以下是这些程序 −