MySQL 字段截取指定字符前面的数字

引言

在日常开发中,我们经常会遇到需要从一个字符串字段中提取出数字的需求。例如,在一个订单表中,有一个字段 order_number,其格式为“Order-12345”,我们需要提取出其中的数字部分,以便进行进一步的处理。MySQL 提供了一些函数来帮助我们实现这个目标。

在本篇文章中,我们将介绍如何使用 MySQL 字符串函数来截取指定字符前面的数字,并通过代码示例来说明其用法。

准备工作

为了演示这个功能,我们需要创建一个示例表 orders,其中包含一个名为 order_number 的字段。

CREATE TABLE orders (
  id INT PRIMARY KEY AUTO_INCREMENT,
  order_number VARCHAR(100)
);

然后,我们向表中插入一些示例数据。

INSERT INTO orders (order_number) VALUES
  ('Order-12345'),
  ('Order-67890'),
  ('Custom-54321');

使用 SUBSTRING_INDEX 函数

MySQL 提供了 SUBSTRING_INDEX 函数来截取字符串中指定字符前面或后面的部分。该函数接受三个参数:原始字符串、指定字符和出现的位置。

下面是一个示例代码,演示如何使用 SUBSTRING_INDEX 函数从 order_number 中截取出数字部分。

SELECT SUBSTRING_INDEX(order_number, '-', 1) AS prefix,
       SUBSTRING_INDEX(order_number, '-', -1) AS number
FROM orders;

上述代码中,我们使用 '-' 作为指定字符,因为我们的示例数据中的订单编号都是以 '-' 分隔前缀和数字部分的。函数 SUBSTRING_INDEX(order_number, '-', 1) 返回指定字符 '-' 前面的部分,而 SUBSTRING_INDEX(order_number, '-', -1) 返回指定字符 '-' 后面的部分。

运行上述代码,我们将得到以下结果:

prefix number
Order 12345
Order 67890
Custom 54321

使用 REGEXP_SUBSTR 函数

除了 SUBSTRING_INDEX 函数,MySQL 还提供了 REGEXP_SUBSTR 函数,可以使用正则表达式来截取字符串中的部分。

下面是一个示例代码,演示如何使用 REGEXP_SUBSTR 函数从 order_number 中截取出数字部分。

SELECT REGEXP_SUBSTR(order_number, '[0-9]+') AS number
FROM orders;

上述代码中,我们使用正则表达式 [0-9]+ 来匹配字符串中的连续数字部分。函数 REGEXP_SUBSTR(order_number, '[0-9]+') 返回匹配到的数字部分。

运行上述代码,我们将得到以下结果:

number
12345
67890
54321

总结

通过使用 MySQL 的字符串函数,我们可以轻松地从一个字符串字段中截取出指定字符前面的数字。在本文中,我们介绍了两种常用的方法:使用 SUBSTRING_INDEX 函数和使用 REGEXP_SUBSTR 函数。根据实际需求和数据格式,选择适合的方法来解决问题。

参考资料

  • [MySQL SUBSTRING_INDEX 函数](
  • [MySQL REGEXP_SUBSTR 函数](
sequenceDiagram
    participant App
    participant MySQL

    App->>MySQL: 创建示例表 orders
    MySQL-->>App: 表创建成功

    App->>MySQL: 向 orders 插入示例数据
    MySQL-->>App: 数据插入成功

    App->>MySQL: 查询 order_number 字段
    MySQL-->>App: 返回查询结果

    Note right of App: 使用 SUBSTRING_INDEX 函数<br/>截取数字部分

    App->>MySQL: SELECT SUBSTRING_INDEX(order_number, '-', 1) AS prefix, SUBSTRING_INDEX(order_number, '-', -1) AS number<br/>FROM orders
    MySQL-->>App: 返回查询结果

    Note right of App: 使用 REGEXP_SUBSTR 函数<br/>截取