MySQL中SUBSTRING_INDEX函数的使用&Oracle中的替代方案
SUBSTRING_INDEX
函数简介
SUBSTRING_INDEX
是MySQL
中一个很实用的字符串处理函数,它的格式如下所示
SUBSTRING_INDEX('待处理字符串', '分隔符', 'count')
使用SUBSTRING_INDEX
可以截取到第count
个分隔符的位置之前的子字符串。count
指定的是第几个分隔符,如果count
是正数则从左往右第count
个分隔符位置,如果为负数则从右往左计数。下面是两个例子
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com'
可以使用嵌套的SUBSTRING_INDEX
获取某两个分隔符之间的内容
mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.mysql.com', '.', 2), '.', -1);
-> 'mysql'
mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.mysql.com', '.', -2), '.', 1);
-> 'mysql'
Oracle中的替代方案
SUBSTRING_INDEX
并不是SQL标准函数,Oracle
中并没有这个函数。Oracle
当然也有替代的方案,只是稍微有点曲折。
SUBSTRING_INDEX
在Oracle
的一个等价实现
Oracle
中可以借助两个函数
-- 返回字符串匹配位置的下标(从开始),索引表示第几个匹配,开始匹配位置如果是负数表明从右往左匹配
INSTR('字符串', '匹配字符串'[, 开始匹配位置[, 索引]])
select INSTR('www.mysql.com', '.') from dual;
4
-- 从右往左匹配
select INSTR('www.mysql.com', '.', -1) from dual;
10
-- 从左往右的第二个匹配位置
select INSTR('www.mysql.com', '.', 1, 2) from dual;
10
-- 从第5个字符开始匹配
select INSTR('www.mysql.com', '.', 5) from dual;
10
-- 子字符串函数,长度可以不指定,不指定则截取从开始位置到字符串结束
SUBSTR('字符串', 开始位置[, 长度])
使用上面两个函数可以实现MySQL中SUBSTRING_INDEX
相同的效果
SUBSTRING_INDEX('字符串', '分隔符', count)
-- count为负数,即从右往左数第count个分隔符位置之后的字符
SUBSTR('字符串', INSTR('字符串', '分隔符', -1, |count|) + 1)
-- count为正数,即取第count个分隔符位置之前的字符
SUBSTR('字符串', 1, INSTR('字符串', '分隔符', 1, count) - 1)
实际可以根据INSTR
和SUBSTR
的功能灵活使用。比如取形如www.mysql.com
这种三段式域名中间的部分可以如下分析
- 使用SUBSTR函数写出框架:
SUBSTR('www.mysql.com', 开始位置,长度)
- 确定开始位置:本例中为第一个分隔符位置+1,即
INSTR('www.mysql.com', '.', 1, 1) + 1
- 确定长度:由于中间位置长度不固定,可以使用第二个分隔符位置减去开始位置得到,即
INSTR('www.mysql.com', '.', 1, 2) - (INSTR('www.mysql.com', '.', 1, 1) + 1)
- 最后可得到如下语句
SELECT SUBSTR('www.mysql.com',INSTR('www.mysql.com', '.', 1, 1) + 1, INSTR('www.mysql.com', '.', 1, 2) - INSTR('www.mysql.com', '.', 1, 1) - 1) FROM DUAL;
参考资料
SUBSTRING_INDEX
SUBSTR函数
INSTR函数
how to split the value in oracle
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)