SUBSTRING()函数用于提取字符串,语法为SUBSTRING(str,pos,len)或SUBSTRING(str FROM pos for len),pos从1开始,len可选;示例:SUBSTRING(‘Hello, World!’,8,5)返回’World’,SUBSTRING(‘Hello, World!’,8)返回’World!’,支持负数位置如SUBSTRING(‘Hello, World!’,-6,5)返回’World’;实际应用中可结合position()提取邮箱域名SUBSTRING(email,POSITION(‘@’ IN email)+1),或提取手机号前三位SUBSTRING(phone,1,3)。

在 mysql 中,SUBSTRING() 函数用于从字符串中提取子串。它可以根据指定的位置和长度截取字符,使用起来非常灵活。
基本语法
SUBSTRING() 的常用语法格式如下:
SUBSTRING(str, pos, len) 或 SUBSTRING(str FROM pos FOR len)
参数说明:
- str:要截取的原始字符串
- pos:起始位置(从1开始计数,不是0)
- len:要截取的字符长度(可选,如果不写则截取从pos到末尾的所有字符)
常见用法示例
假设有一个字符串 ‘Hello, World!’,我们来看看几种典型用法:
1. 截取固定长度子串
select SUBSTRING(‘Hello, World!’, 8, 5); — 结果:World
2. 从指定位置截取到末尾
SELECT SUBSTRING(‘Hello, World!’, 8); — 结果:World!
3. 使用负数位置(从右往左数)
SELECT SUBSTRING(‘Hello, World!’, -6, 5); — 结果:World
负数表示从字符串末尾倒数,-1 是最后一个字符。
在实际查询中的应用
比如有一张用户表 users,其中 email 字段存储邮箱地址,想提取 @ 符号后面的域名部分:
SELECT email, SUBSTRING(email, POSITION(‘@’ IN email) + 1) AS domain FROM users;
这里结合了 POSITION() 函数找到 @ 的位置,然后从下一个字符开始截取到末尾。
再比如提取手机号前三位作为地区码:
SELECT SUBSTRING(phone, 1, 3) AS area_code FROM users;
基本上就这些。掌握好起始位置和长度,就能准确提取所需内容。


