在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()(适合从固定一侧截取)sqlSELECT 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())组合,应对复杂场景。例如,截取邮箱的用户名部分:sqlSELECT SUBSTRING('user@example.com', 1, LOCATE('@', 'user@example.com')-1); -- LOCATE('@', ...) 返回'@'的位置,减1后作为长度参数 -- 结果: 'user' -
参数边界 :
- 如果起始位置
pos超出字符串长度,函数将返回空字符串''。 - 截取长度
len不能为负数,否则也会返回空字符串。
- 如果起始位置
🔍 如何选择函数
面对不同需求,你可以这样快速选择:
- 从指定位置截取指定长度 :用
SUBSTRING()。 - 总是从字符串的左侧或右侧开始截取 :用
LEFT()或RIGHT(),语法更简洁。 - 按分隔符(如
-、/、.)截取某部分 :用SUBSTRING_INDEX()。
总的来说,SUBSTRING() 是功能最全面的首选,而其他函数在特定场景下能让代码更简洁易读。
如果你能告诉我你具体想处理什么样的字符串数据(比如是邮箱、网址,还是有固定格式的编码),我可以给你更具体的截取方案。