MySQL 字符串截取函数详解

打印 上一主题 下一主题

主题 1839|帖子 1839|积分 5517

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

MySQL 字符串截取函数详解

在 MySQL 中,字符串截取是常见的操作,主要用于从字符串中提取特定部分。MySQL 提供了多种函数来实现这一功能,包罗 LEFT()、RIGHT()、SUBSTRING()、MID()、SUBSTR() 和 SUBSTRING_INDEX() 等。本文将具体介绍这些函数的用法,并通过示例进行说明。

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


功能:从字符串 str 的左侧开始,截取 length 个字符。
语法
  1. LEFT(str, length)
复制代码
示例
  1. SELECT LEFT('sqlstudy.com', 3);
复制代码
结果
  1. +-------------------------+
  2. | LEFT('sqlstudy.com', 3) |
  3. +-------------------------+
  4. | sql                     |
  5. +-------------------------+
复制代码
解释:从 'sqlstudy.com' 的左侧开始,截取 3 个字符,结果为 'sql'。

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


功能:从字符串 str 的右侧开始,截取 length 个字符。
语法
  1. RIGHT(str, length)
复制代码
示例
  1. SELECT RIGHT('sqlstudy.com', 3);
复制代码
结果
  1. +--------------------------+
  2. | RIGHT('sqlstudy.com', 3) |
  3. +--------------------------+
  4. | com                      |
  5. +--------------------------+
复制代码
解释:从 'sqlstudy.com' 的右侧开始,截取 3 个字符,结果为 'com'。

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

功能:从字符串 str 的第 pos 个字符开始,截取 len 个字符。pos 可以是正数或负数,正数表现从左侧开始,负数表现从右侧开始。
语法
  1. SUBSTRING(str, pos)
  2. SUBSTRING(str, pos, len)
复制代码
示例
  1. -- 从第 4 个字符开始,直到结束
  2. SELECT SUBSTRING('sqlstudy.com', 4);
  3. -- 从第 4 个字符开始,截取 2 个字符
  4. SELECT SUBSTRING('sqlstudy.com', 4, 2);
  5. -- 从倒数第 4 个字符开始,直到结束
  6. SELECT SUBSTRING('sqlstudy.com', -4);
  7. -- 从倒数第 4 个字符开始,截取 2 个字符
  8. SELECT SUBSTRING('sqlstudy.com', -4, 2);
复制代码
结果
  1. +------------------------------+
  2. | SUBSTRING('sqlstudy.com', 4) |
  3. +------------------------------+
  4. | study.com                    |
  5. +------------------------------+
  6. +---------------------------------+
  7. | SUBSTRING('sqlstudy.com', 4, 2) |
  8. +---------------------------------+
  9. | st                              |
  10. +---------------------------------+
  11. +-------------------------------+
  12. | SUBSTRING('sqlstudy.com', -4) |
  13. +-------------------------------+
  14. | .com                          |
  15. +-------------------------------+
  16. +----------------------------------+
  17. | SUBSTRING('sqlstudy.com', -4, 2) |
  18. +----------------------------------+
  19. | .c                               |
  20. +----------------------------------+
复制代码
解释


  • 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,返回空字符串。例如:
    1. SELECT SUBSTRING('abc', 0, 1);   -- 结果:空字符串
    2. SELECT SUBSTRING('abc', 5, 1);   -- 结果:空字符串
    复制代码

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


功能:根据分隔符 delim,从字符串 str 中截取出第 count 次出现的分隔符前或后的子字符串。count 为正数时,从左侧开始计数;为负数时,从右侧开始计数。
语法
  1. SUBSTRING_INDEX(str, delim, count)
复制代码
示例
  1. -- 截取第二个 '.' 之前的所有字符
  2. SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2);
  3. -- 截取倒数第二个 '.' 之后的所有字符
  4. SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2);
  5. -- 如果分隔符不存在,返回整个字符串
  6. SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1);
复制代码
结果
  1. +------------------------------------------------+
  2. | SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2) |
  3. +------------------------------------------------+
  4. | www.sqlstudy                                   |
  5. +------------------------------------------------+
  6. +-------------------------------------------------+
  7. | SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2) |
  8. +-------------------------------------------------+
  9. | com.cn                                          |
  10. +-------------------------------------------------+
  11. +---------------------------------------------------+
  12. | SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1) |
  13. +---------------------------------------------------+
  14. | www.sqlstudy.com.cn                               |
  15. +---------------------------------------------------+
复制代码
解释


  • 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 超过分隔符实际出现的次数,返回整个字符串。例如:
    1. SELECT SUBSTRING_INDEX('a.b.c.d', '.', 5);  -- 结果:'a.b.c.d'
    复制代码

MID(str, pos, len) 或 SUBSTR(str, pos, len):与 SUBSTRING 等价

功能:与 SUBSTRING 函数功能相同,用于从指定位置开始截取指定长度的子字符串。
语法
  1. MID(str, pos, len)
  2. SUBSTR(str, pos, len)
复制代码
示例
  1. -- 从第 4 个字符开始,截取 2 个字符
  2. SELECT MID('sqlstudy.com', 4, 2);
  3. -- 从倒数第 4 个字符开始,截取 2 个字符
  4. SELECT SUBSTR('sqlstudy.com', -4, 2);
复制代码
结果
  1. +----------------------------------+
  2. | MID('sqlstudy.com', 4, 2)        |
  3. +----------------------------------+
  4. | st                               |
  5. +----------------------------------+
  6. +-----------------------------------+
  7. | SUBSTR('sqlstudy.com', -4, 2)     |
  8. +-----------------------------------+
  9. | .c                                |
  10. +-----------------------------------+
复制代码
解释


  • 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)。例如:
  1. SELECT LEFT('中文测试', 2);  -- 结果:'中文'
  2. SELECT SUBSTRING('数据库', 2, 2);  -- 结果:'据库'
复制代码

实际应用场景

场景 1:提取邮箱的域名

  1. SELECT
  2.   email,
  3.   SUBSTRING_INDEX(email, '@', -1) AS domain
  4. FROM users;
复制代码
结果
  1. +-------------------+-------------+
  2. | email             | domain      |
  3. +-------------------+-------------+
  4. | user@example.com  | example.com |
  5. +-------------------+-------------+
复制代码
场景 2:解析 URL 中的路径

  1. SELECT
  2.   SUBSTRING_INDEX(SUBSTRING_INDEX(url, '//', -1), '/', 1) AS host
  3. FROM website;
复制代码
输入:'https://www.sqlstudy.com/path'
输出:'www.sqlstudy.com'

总结

函数功能概要核心区别LEFT() / RIGHT()从左右侧截取固定长度方向固定,长度明确SUBSTRING()灵活指定起始位置和长度支持正负位置,功能最全面SUBSTRING_INDEX()基于分隔符截取得当处理布局化字符串(如路径)MID() / SUBSTR()与 SUBSTRING 功能相同语法别名,可交换利用 把握这些函数,可以高效处理字符串截取需求,提升数据处理的灵活性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表