语法说明
- 语法:
substring_index(str,sep,num)。
substring_index(需要处理的字符串,分隔符,序号)。
- 序号必须非0整数。
- 为正表示从字符串正向截取,截取分隔符出现第num次之前的字符串。
- 为负,表示从字符串末尾截取。截取字符串出现第num次之后的字符串。
- substring_index可以嵌套使用,重复截取,直到截取到想要的数据。
- demo
- 从头开始截取,直到截取到第一次分隔符出现的位置(不包含分隔符)。
SELECT SUBSTRING_INDEX("www.baidu.com www.qq.com www.sina.com www.google.com",".",1);
运行结果:www
- 从末尾开始向前截取,直到截取到第一次分隔符出现的位置(不包含分隔符)。
SELECT SUBSTRING_INDEX("www.baidu.com www.qq.com www.sina.com www.google.com",".",-1);
运行结果:com
-从末尾向前截取,截取到,第3次分隔符出现的位置(不包含分隔符)。
SELECT SUBSTRING_INDEX("www.baidu.com www.qq.com www.sina.com www.google.com",".",-3);
运行结果:com www.google.com
-从头开始截取,直到截取到第3次分隔符出现的位置(不包含分隔符)。
SELECT SUBSTRING_INDEX("www.baidu.com www.qq.com www.sina.com www.google.com",".",3);
运行结果:www.baidu.com www
-从前开始,截取到第3个www出现的位置(不包含www)
SELECT SUBSTRING_INDEX("www.baidu.com www.qq.com www.sina.com www.google.com","www",3);
运行结果:www.baidu.com www.qq.com
-SUBSTRING_INDEX可以嵌套使用,实现复杂的截取功能
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX("www.baidu.com www.qq.com www.sina.com www.google.com","www.",-2),".",1);
运行结果:sina ①.第一次截取结果为sina.com www.google.com ②.第2次截取第一个.,所以为sina。
- 思考
- 如何截取掉开头不要的部分:例如 qqwww.baidu.com.qq,如何截取到www.baidu.com.qq
SELECT SUBSTRING_INDEX("qqwww.baidu.com.qq","qq",-2);
运行结果:www.baidu.com.qq
- 上述场景是qq次数确定时。但如果出现多个qq(qqwww.baiduqq.comqq.qq)呢,此时,上述截取就报错。有没比较兼容的写法。
SELECT SUBSTRING_INDEX("qqwww.baiduqq.comqq.qq","qq",-2);
执行结果.qq ERROR
SELECT SUBSTRING("qqwww.baiduqq.comqq.qq",LOCATE("qq","qqwww.baiduqq.comqq.qq")+LENGTH('qq'));
-