当前位置: 代码网 > it编程>数据库>Mysql > MySQL 字符串截取函数及用法详解

MySQL 字符串截取函数及用法详解

2025年05月21日 Mysql 我要评论
mysql 字符串截取函数详解在 mysql 中,字符串截取是常见的操作,主要用于从字符串中提取特定部分。mysql 提供了多种函数来实现这一功能,包括 left()、right()、substrin

mysql 字符串截取函数详解

在 mysql 中,字符串截取是常见的操作,主要用于从字符串中提取特定部分。mysql 提供了多种函数来实现这一功能,包括 left()right()substring()mid()substr()substring_index() 等。本文将详细介绍这些函数的用法,并通过示例进行说明。

left(str, length):从左侧截取指定长度的字符

功能:从字符串 str 的左侧开始,截取 length 个字符。

语法

left(str, length)

示例

select left('sqlstudy.com', 3);

结果

+-------------------------+
| left('sqlstudy.com', 3) |
+-------------------------+
| sql |
+-------------------------+

解释:从 'sqlstudy.com' 的左侧开始,截取 3 个字符,结果为 'sql'

right(str, length):从右侧截取指定长度的字符

功能:从字符串 str 的右侧开始,截取 length 个字符。

语法

right(str, length)

示例

select right('sqlstudy.com', 3);

结果

+--------------------------+
| right('sqlstudy.com', 3) |
+--------------------------+
| com |
+--------------------------+

解释:从 'sqlstudy.com' 的右侧开始,截取 3 个字符,结果为 'com'

substring(str, pos) 或 substring(str, pos, len):从指定位置开始截取

功能:从字符串 str 的第 pos 个字符开始,截取 len 个字符。pos 可以是正数或负数,正数表示从左侧开始,负数表示从右侧开始。

语法

substring(str, pos)
substring(str, pos, len)

示例

-- 从第 4 个字符开始,直到结束
select substring('sqlstudy.com', 4);
-- 从第 4 个字符开始,截取 2 个字符
select substring('sqlstudy.com', 4, 2);
-- 从倒数第 4 个字符开始,直到结束
select substring('sqlstudy.com', -4);
-- 从倒数第 4 个字符开始,截取 2 个字符
select substring('sqlstudy.com', -4, 2);

结果

+------------------------------+
| substring('sqlstudy.com', 4) |
+------------------------------+
| study.com |
+------------------------------+

+---------------------------------+
| substring('sqlstudy.com', 4, 2) |
+---------------------------------+
| st |
+---------------------------------+

+-------------------------------+
| substring('sqlstudy.com', -4) |
+-------------------------------+
| .com |
+-------------------------------+

+----------------------------------+
| substring('sqlstudy.com', -4, 2) |
+----------------------------------+
| .c |
+----------------------------------+

解释

  • substring('sqlstudy.com', 4):从第 4 个字符开始,直到字符串结束,结果为 'study.com'
  • substring('sqlstudy.com', 4, 2):从第 4 个字符开始,截取 2 个字符,结果为 'st'
  • substring('sqlstudy.com', -4):从倒数第 4 个字符开始,直到字符串结束,结果为 '.com'
  • substring('sqlstudy.com', -4, 2):从倒数第 4 个字符开始,截取 2 个字符,结果为 '.c'

注意

len 必须为非负整数。若省略 len,则默认截取到字符串末尾。

pos 超出字符串长度或为 0,返回空字符串。例如:

select substring('abc', 0, 1);   -- 结果:空字符串
select substring('abc', 5, 1);   -- 结果:空字符串

substring_index(str, delim, count):根据分隔符截取字符串

功能:根据分隔符 delim,从字符串 str 中截取出第 count 次出现的分隔符前或后的子字符串。count 为正数时,从左侧开始计数;为负数时,从右侧开始计数。

语法

substring_index(str, delim, count)

示例

-- 截取第二个 '.' 之前的所有字符
select substring_index('www.sqlstudy.com.cn', '.', 2);
-- 截取倒数第二个 '.' 之后的所有字符
select substring_index('www.sqlstudy.com.cn', '.', -2);
-- 如果分隔符不存在,返回整个字符串
select substring_index('www.sqlstudy.com.cn', '.coc', 1);

结果

+------------------------------------------------+
| substring_index('www.sqlstudy.com.cn', '.', 2) |
+------------------------------------------------+
| www.sqlstudy |
+------------------------------------------------+

+-------------------------------------------------+
| substring_index('www.sqlstudy.com.cn', '.', -2) |
+-------------------------------------------------+
| com.cn |
+-------------------------------------------------+

+---------------------------------------------------+
| substring_index('www.sqlstudy.com.cn', '.coc', 1) |
+---------------------------------------------------+
| www.sqlstudy.com.cn |
+---------------------------------------------------+

解释

  • substring_index('www.sqlstudy.com.cn', '.', 2):返回第 2 次出现的 . 之前的所有字符,结果为 'www.sqlstudy'
  • substring_index('www.sqlstudy.com.cn', '.', -2):返回倒数第 2 次出现的 . 之后的所有字符,结果为 'com.cn'
  • substring_index('www.sqlstudy.com.cn', '.coc', 1):由于 .coc 不存在于字符串中,返回整个字符串 'www.sqlstudy.com.cn'

注意

count 超过分隔符实际出现的次数,返回整个字符串。例如:

select substring_index('a.b.c.d', '.', 5);  -- 结果:'a.b.c.d'

mid(str, pos, len) 或 substr(str, pos, len):与 substring 等价

功能:与 substring 函数功能相同,用于从指定位置开始截取指定长度的子字符串。

语法

mid(str, pos, len)
substr(str, pos, len)

示例

-- 从第 4 个字符开始,截取 2 个字符
select mid('sqlstudy.com', 4, 2);
-- 从倒数第 4 个字符开始,截取 2 个字符
select substr('sqlstudy.com', -4, 2);

结果

+----------------------------------+
| mid('sqlstudy.com', 4, 2) |
+----------------------------------+
| st |
+----------------------------------+

+-----------------------------------+
| substr('sqlstudy.com', -4, 2) |
+-----------------------------------+
| .c |
+-----------------------------------+

解释

  • mid('sqlstudy.com', 4, 2)substring('sqlstudy.com', 4, 2) 结果相同,均为 'st'
  • substr('sqlstudy.com', -4, 2)substring('sqlstudy.com', -4, 2) 结果相同,均为 '.c'

多字节字符处理

mysql 的字符串截取函数默认按字符(而非字节)处理,适用于多字节字符集(如 utf-8)。例如:

select left('中文测试', 2);  -- 结果:'中文'
select substring('数据库', 2, 2);  -- 结果:'据库'

实际应用场景

场景 1:提取邮箱的域名

select 
  email,
  substring_index(email, '@', -1) as domain
from users;

结果

+-------------------+-------------+
| email | domain |
+-------------------+-------------+
| user@example.com | example.com |
+-------------------+-------------+

场景 2:解析 url 中的路径

select 
  substring_index(substring_index(url, '//', -1), '/', 1) as host
from website;

输入'https://www.sqlstudy.com/path'
输出'www.sqlstudy.com'

总结

函数功能概要核心区别
left() / right()从左右侧截取固定长度方向固定,长度明确
substring()灵活指定起始位置和长度支持正负位置,功能最全面
substring_index()基于分隔符截取适合处理结构化字符串(如路径)
mid() / substr()substring 功能相同语法别名,可互换使用

掌握这些函数,可以高效处理字符串截取需求,提升数据处理的灵活性。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com