MySQL截取和拆分字符串函数用法详解

木白
木白
发布时间:2026-10-13 | 2人浏览过
原创

在MySQL数据库开发中,经常需要处理文本字段的数据清洗或提取工作。本文将深入解析两个最常用的字符串函数:SUBSTRING(截取)和 SUBSTRING_INDEX(按分隔符拆分)。通过实际SQL语句示例,演示如何灵活组合这些参数,实现从复杂字符串中提取特定信息的目标。

SUBSTRING截取字符串

SUBSTRING 函数用于从目标字符串中提取一段连续的子串。其基本语法包含三个参数:目标字符串、起始位置和截取长度。

  • 起始位置:从第几个字符开始截取(从1开始计数)。
  • 截取长度:可选参数,指定截取的字符数。如果省略,默认截取到字符串末尾。
  • 负数索引:如果起始位置为负数,表示从字符串末尾倒数开始截取。

基础用法:从指定位置截取到结尾

假设需要从 ID 的第9个字符开始截取剩余部分:

SUBSTRING(commentid, 9)

上述语句将从 commentid 字段的第9位字符开始一直取到最后。若需指定长度,例如只取接下来的5个字符,可写为 SUBSTRING(commentid, 9, 5)。

SUBSTRING_INDEX拆分字符串

SUBSTRING_INDEX 函数非常适合处理具有固定分隔符的字符串。它可以根据指定的分隔符,返回分隔符出现第N次之前的子串。

语法结构:SUBSTRING_INDEX(被分割字符串, 分隔符, 计数)

  • 正数计数:从左往右数,返回第N个分隔符之前的所有内容。
  • 负数计数:从右往左数,返回倒数第N个分隔符之后的所有内容。

步骤1:提取分隔符前后的内容

以字符串 'c-11065-50' 为例,使用 - 作为分隔符:

提取第一个部分('c'):

SELECT SUBSTRING_INDEX('c-11065-50', '-', 1);

提取最后一个部分('50'):

SELECT SUBSTRING_INDEX('c-11065-50', '-', -1);

步骤2:嵌套调用提取中间部分

如果需要提取中间的值(如 '11065'),可以通过嵌套两次函数来实现。原理是先切断尾部,再从剩余部分切断头部,或者先切断头部,再截取尾部。

方法A:先取前两部分,再取最后一部分

先用 -2 取出 'c-11065',再用 -1 从这个结果中取出最后一部分:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('c-11065-50', '-', -2), '-', 1);
-- 结果: 11065

方法B:先取前两部分,再取最后一部分(另一种逻辑)

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('c-11065-50', '-', 2), '-', -1);
-- 结果: 11065

高级组合:混合截取与拆分

当字符串格式不规则或包含多个不同分隔符时,可以组合使用 SUBSTRING 和 SUBSTRING_INDEX。

目标:从 'content_13-11220-1' 中提取 13

常规三层嵌套写法:

  1. 先用 SUBSTRING 去掉 content_ 前缀。
  2. 再用内层 SUBSTRING_INDEX 取 - 后的第一段(即 13-11220-1)。
  3. 最后用外层 SUBSTRING_INDEX 提取该段中第一个 - 前的数字。
SELECT SUBSTRING_INDEX(
  SUBSTRING_INDEX(
    SUBSTRING(commentid, 9), 
    '-', 
    1
  ), 
  '-', 
  -1
) FROM check WHERE commentid = 'content_13-11220-1';
-- 注意:这里逻辑可能需要根据实际数据微调,通常提取13更简单的做法是直接定位下划线

优化写法:减少函数调用次数

为了提升查询性能,特别是在大数据量下,应尽量减少嵌套层级。观察字符串 'content_13-...',可以直接针对 _ 进行拆分:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(commentid, '-', 1), '_', -1)
FROM check 
WHERE commentid = 'content_13-11220-1';

该逻辑如下:

  1. 内层 SUBSTRING_INDEX(..., '-', 1) 获取 'content_13'。
  2. 外层 SUBSTRING_INDEX(..., '_', -1) 从 'content_13' 中倒数第1个 _ 之后取值,即为 '13'。

这种写法仅执行两次函数调用,比三次嵌套效率更高。

总结

以上介绍了MySQL中截取和拆分字符串的核心函数用法。掌握 SUBSTRING 的位置控制与 SUBSTRING_INDEX 的分隔符逻辑,并结合负数索引与嵌套技巧,可以灵活应对绝大多数字符串提取场景。在实际应用中,优先选择函数调用次数最少的方案以提升SQL执行效率。以上就是MySQL截取和拆分字符串函数用法示例的详细内容,更多关于MySQL数据处理技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表