MySQL 字符串函数 SUBSTRING_INDEX 详
·
在 MySQL 里面,字符串处理非常常见
这时候就经常会用到:
SUBSTRING_INDEX()
很多人第一次看到这个函数会有点懵
因为它和:
LEFT()
RIGHT()
SUBSTRING()
这种函数不太一样
但实际上,它的逻辑非常简单
一、SUBSTRING_INDEX 基本语法
SUBSTRING_INDEX(str, delim, count)
参数解释:
| 参数 | 含义 |
|---|---|
| str | 原字符串 |
| delim | 分隔符 |
| count | 取第几个分隔位置 |
二、最核心的理解
这个函数本质上就一句话:
按照某个分隔符,把字符串切开,然后取其中一部分。
重点在于:
count
是正数还是负数
因为:
- 正数 → 从左往右数
- 负数 → 从右往左数
三、count 为正数(从左往右)
先看字符串:
'a,b,c,d'
1.count = 1
SELECT SUBSTRING_INDEX('a,b,c,d', ',', 1);
含义:
从左往右,
找到第1个逗号,
取它前面的内容
结果:
a
2.count = 2
SELECT SUBSTRING_INDEX('a,b,c,d', ',', 2);
含义:
从左往右,
找到第2个逗号,
取它前面的内容
结果:
a,b
3.count = 3
SELECT SUBSTRING_INDEX('a,b,c,d', ',', 3);
结果:
a,b,c
四、count 为负数(从右往左)
这个是很多人最容易懵的地方。
记住一句话:
负数就是从右边开始数。
1.count = -1
SELECT SUBSTRING_INDEX('a,b,c,d', ',', -1);
含义:
从右往左,
找到第1个逗号,
取它后面的内容
结果:
d
2.count = -2
SELECT SUBSTRING_INDEX('a,b,c,d', ',', -2);
含义:
从右往左,
找到第2个逗号,
取它后面的内容
结果:
c,d
3.count = -3
SELECT SUBSTRING_INDEX('a,b,c,d', ',', -3);
结果:
b,c,d
五、一张图彻底理解
原字符串:
a,b,c,d
位置:
a , b , c , d
↑ ↑ ↑
1 2 3
正数
1 → a
2 → a,b
3 → a,b,c
从左边开始取。
负数
-1 → d
-2 → c,d
-3 → b,c,d
从右边开始取。
六、实际开发中的经典用法
1.获取邮箱后缀
比如:
abc@qq.com
想获取:
qq.com
写法:
SELECT SUBSTRING_INDEX(
'abc@qq.com',
'@',
-1
);
结果:
qq.com
2.获取文件后缀
比如:
test.jpg
获取:
jpg
写法:
SELECT SUBSTRING_INDEX(
'test.jpg',
'.',
-1
);
3.获取 IP 最后一段
192.168.1.100
获取:
100
写法:
SELECT SUBSTRING_INDEX(
'192.168.1.100',
'.',
-1
);
4.获取路径最后一级目录
/home/user/mysql
获取:
mysql
写法:
SELECT SUBSTRING_INDEX(
'/home/user/mysql',
'/',
-1
);
七、嵌套使用(非常重要)
这个函数最强的地方:
可以套娃
比如:
a,b,c,d
想取:
b
怎么办?
第一步
先取前两个:
SELECT SUBSTRING_INDEX(
'a,b,c,d',
',',
2
);
结果:
a,b
第二步
再从右边取一个:
SELECT SUBSTRING_INDEX(
SUBSTRING_INDEX(
'a,b,c,d',
',',
2
),
',',
-1
);
结果:
b
八、新手最容易犯的错
1.搞反正负数
记住:
正数 → 左边
负数 → 右边
2.以为 count 是“字符数”
不是。
它代表:
第几个分隔符
不是第几个字符。
3.分隔符不存在
比如:
SELECT SUBSTRING_INDEX(
'abcd',
',',
1
);
因为没有逗号。
结果会直接返回:
abcd
九、最后总结(核心记住)
SUBSTRING_INDEX 本质就一句话:
按照某个分隔符切割字符串。
正数
从左往右取
负数
从右往左取
更多推荐



所有评论(0)