MySQL 字段截取函数大全
MySQL 提供了 3 个最常用 的字段截取函数,满足所有截取场景,直接复制就能用:
1. 从指定位置截取(最通用)
SUBSTRING(str, start, length)str:要截取的字段名start:起始位置( 从 1 开始 ,正数从左数,负数从右数)length:可选,截取长度(不写则截取到末尾)
常用示例
-- 1. 从第 2 位开始,截取到末尾
SELECT SUBSTRING(name, 2) FROM user;
-- 2. 从第 2 位开始,截取 3 个字符
SELECT SUBSTRING(name, 2, 3) FROM user;
-- 3. 从末尾倒数第 2 位开始截取
SELECT SUBSTRING(name, -2) FROM user;2. 从左边截取固定长度
LEFT(str, length)- 专门从 字段开头 向左截取指定长度,语法最简单
-- 截取手机号前 3 位(138、139 等)
SELECT LEFT(phone, 3) FROM user;
-- 截取姓名前 2 个字
SELECT LEFT(name, 2) FROM user;3. 从右边截取固定长度
RIGHT(str, length)- 专门从 字段末尾 向右截取指定长度
-- 截取手机号后 4 位
SELECT RIGHT(phone, 4) FROM user;
-- 截取邮箱后缀(如.com)
SELECT RIGHT(email, 3) FROM user;4. 按分隔符截取(实用高频)
SUBSTRING_INDEX(str, delimiter, count)- 按 指定符号 分割字符串,取指定部分
delimiter:分隔符(如逗号、点、横杠)count:正数取前 N 段,负数取后 N 段
示例
-- 1. 截取邮箱 @前面的账号(test@163.com → test)
SELECT SUBSTRING_INDEX(email, '@', 1) FROM user;
-- 2. 截取邮箱后缀(test@163.com → 163.com)
SELECT SUBSTRING_INDEX(email, '@', -1) FROM user;
-- 3. 截取日期的年份(2025-03-26 → 2025)
SELECT SUBSTRING_INDEX(create_time, '-', 1) FROM user;快速选择指南
| 需求场景 | 推荐函数 |
|---|---|
| 从左/右固定长度截取 | LEFT() / RIGHT() |
| 任意位置开始截取 | SUBSTRING() |
| 按符号分割截取 | SUBSTRING_INDEX() |
总结
- 日常截取优先用
LEFT/RIGHT,最简单直观 - 灵活截取用
SUBSTRING,支持任意起始位置 - 按分隔符拆分用
SUBSTRING_INDEX,处理邮箱、日期必备 - 所有函数 起始位置从 1 开始 ,不是 0





