SUBSTRING_INDEX 是 MySQL 中的一个字符串函数,用于从指定分隔符中提取子字符串。它通过给定的分隔符分割字符串,并返回指定位置的子字符串。
语法
SUBSTRING_INDEX(string, delimiter, count)
参数说明
• string:要操作的字符串。
• delimiter:用作分隔符的字符串。
• count:一个整数,表示返回多少个分隔符前或后的部分:
• 正数:从左到右提取,返回从第一个子字符串到第 count 个分隔符之前的部分。
• 负数:从右到左提取,返回从最后一个子字符串到第 count 个分隔符之后的部分。
示例
示例 1:提取分隔符左侧的子字符串
SELECT SUBSTRING_INDEX('www.example.com', '.', 1);
结果:www
说明:按 . 分隔,从左开始取第一个分隔符之前的部分。
示例 2:提取分隔符右侧的子字符串
SELECT SUBSTRING_INDEX('www.example.com', '.', -1);
结果:com
说明:按 . 分隔,从右开始取第一个分隔符之后的部分。
示例 3:提取多个分隔符之间的部分
SELECT SUBSTRING_INDEX('www.example.com', '.', 2);
结果:www.example
说明:按 . 分隔,从左开始取前两个部分。
示例 4:提取从右到左的多个分隔符之间的部分
SELECT SUBSTRING_INDEX('www.example.com', '.', -2);
结果:example.com
说明:按 . 分隔,从右开始取后两个部分。
注意事项
1. 分隔符不存在:如果字符串中不包含分隔符,则返回整个字符串。
SELECT SUBSTRING_INDEX('example', '.', 1);
结果:example
2. count 超过实际分隔符数量:如果 count 大于分隔符实际数量,则返回整个字符串。
SELECT SUBSTRING_INDEX('www.example.com', '.', 5);
3. 分隔符为空字符串:将直接返回空字符串。
SELECT SUBSTRING_INDEX('example', '', 1);
结果:''
常见应用场景
1. 提取域名部分:
SELECT SUBSTRING_INDEX('user@domain.com', '@', -1) AS domain;
结果:domain.com
2. 从路径中提取文件名:
SELECT SUBSTRING_INDEX('/path/to/file.txt', '/', -1) AS filename;
结果:file.txt
3. 从 IP 地址中提取网段:
SELECT SUBSTRING_INDEX('192.168.1.1', '.', 3) AS subnet;
结果:192.168.1
如果需要更复杂的字符串操作,可以结合其他字符串函数(如 LOCATE、INSTR、CONCAT)使用。