[mysql]字符串截取

在MySQL中,最核心和常用的字符串截取函数是 SUBSTRING()(或其别名 SUBSTR()MID()),但根据不同的截取需求,还有其他几个实用的函数。

下表对比了这些常用函数,方便你快速了解:

函数 语法 功能描述
SUBSTRING() SUBSTRING(str, pos, len) 从字符串str的指定位置pos开始,截取长度为len的子串。最灵活。在mysql中, pos从1开始
LEFT() LEFT(str, len) 从字符串str左侧 开始,截取指定长度len的子串。
RIGHT() RIGHT(str, len) 从字符串str右侧 开始,截取指定长度len的子串。
SUBSTRING_INDEX() SUBSTRING_INDEX(str, delim, count) 按分隔符delim截取。count为正时取左部分,为负时取右部分。

🧩 核心函数:SUBSTRING() 详解

SUBSTRING() 是最通用的截取函数,其完整语法如下:

sql 复制代码
SUBSTRING(str, pos, len)
  • str:要处理的原始字符串。
  • pos :起始位置。
    • 值为正数 时,从字符串开头 的第pos个字符开始(MySQL中位置从1开始计数)。
    • 值为负数 时,从字符串末尾 倒数的第pos个字符开始。
  • len (可选):要截取的长度。如果省略,则截取从pos开始到字符串末尾的所有字符。

📝 不同函数的典型用法示例

了解语法后,通过具体例子能更清楚地知道如何选择:

  • 使用 SUBSTRING()

    sql 复制代码
    -- 从第4个字符开始截取到最后
    SELECT SUBSTRING('Hello, World!', 8); -- 结果: 'World!'
    -- 从第1个字符开始,截取5个字符
    SELECT SUBSTRING('Hello, World!', 1, 5); -- 结果: 'Hello'
    -- 从倒数第6个字符开始,截取5个字符
    SELECT SUBSTRING('Hello, World!', -6, 5); -- 结果: 'World'
  • 使用 LEFT()RIGHT()(适合从固定一侧截取)

    sql 复制代码
    SELECT LEFT('MySQL', 2); -- 结果: 'My' (从左截取)
    SELECT RIGHT('MySQL', 3); -- 结果: 'SQL' (从右截取)
  • 使用 SUBSTRING_INDEX()(适合按分隔符截取)

    sql 复制代码
    -- 获取邮箱域名部分:找到第二个'.'之前的所有内容
    SELECT SUBSTRING_INDEX('www.example.com', '.', 2); -- 结果: 'www.example'
    -- 获取最后两部分:从右侧开始,找到第二个'.'之后的所有内容
    SELECT SUBSTRING_INDEX('www.example.com', '.', -2); -- 结果: 'example.com'

💡 使用技巧与注意事项

在实际使用时,有几个关键点需要注意:

  • 组合使用 :可以将截取函数与其他字符串函数(如 LOCATE()LENGTH())组合,应对复杂场景。例如,截取邮箱的用户名部分:

    sql 复制代码
    SELECT SUBSTRING('user@example.com', 1, LOCATE('@', 'user@example.com')-1);
    -- LOCATE('@', ...) 返回'@'的位置,减1后作为长度参数
    -- 结果: 'user'
  • 参数边界

    • 如果起始位置 pos 超出字符串长度,函数将返回空字符串 ''
    • 截取长度 len 不能为负数,否则也会返回空字符串。

🔍 如何选择函数

面对不同需求,你可以这样快速选择:

  • 从指定位置截取指定长度 :用 SUBSTRING()
  • 总是从字符串的左侧或右侧开始截取 :用 LEFT()RIGHT(),语法更简洁。
  • 按分隔符(如-/.)截取某部分 :用 SUBSTRING_INDEX()

总的来说,SUBSTRING() 是功能最全面的首选,而其他函数在特定场景下能让代码更简洁易读。

如果你能告诉我你具体想处理什么样的字符串数据(比如是邮箱、网址,还是有固定格式的编码),我可以给你更具体的截取方案。

相关推荐
不想画图2 小时前
Mysql 主从复制和读写分离实战
mysql
前进的李工2 小时前
SQL排序与分页查询技巧
开发语言·数据库·sql·mysql·oracle
gugugu.2 小时前
MySQL 索引:核心原理、数据结构与优化实践
数据库·mysql
Fortune_yangyang2 小时前
数据库基础
运维·网络·数据库·mysql
可可苏饼干2 小时前
MySQL 索引
运维·数据库·学习·mysql
落日漫游2 小时前
Redis集群与MySQL的对比
数据库·redis·mysql
霸王大陆2 小时前
《零基础学PHP:从入门到实战》教程-模块七:MySQL 数据库基础-4
数据库·mysql·php
叽里咕噜怪2 小时前
MySQL-主从复制实验详解
数据库·mysql
即将进化成人机2 小时前
巷陌店铺方法功能整理
数据库·mysql