如何通过SUBSTR和INSTR从文件名中提取primary/secondary字段
解决方案:用SUBSTR和INSTR提取目标字符串
没问题,我来帮你搞定这个需求!你之前的SQL是定位了最后的.来截取后缀,现在我们需要调整思路,定位_和.这两个分隔符,截取它们之间的内容就可以了。
核心思路
你的文件名格式是前缀_目标内容.log,所以我们需要:
- 找到
_的位置,然后向后偏移1位,作为截取的起始点 - 找到
.的位置,计算它和_位置的差值,得到需要截取的长度
实现代码
SELECT -- 提取name1中的primary SUBSTR(name1, INSTR(name1, '_') + 1, INSTR(name1, '.') - INSTR(name1, '_') - 1) AS target_segment1, -- 提取name2中的secondary SUBSTR(name2, INSTR(name2, '_') + 1, INSTR(name2, '.') - INSTR(name2, '_') - 1) AS target_segment2 FROM ( SELECT 'abc_primary.log' AS name1, 'abc_secondary.log' AS name2 FROM dual );
代码解释
我们拆解一下关键部分的作用:
INSTR(name1, '_'):返回下划线_在字符串中的索引位置(比如abc_primary.log中这个值是4)INSTR(name1, '_') + 1:跳过下划线,定位到目标内容的第一个字符(位置5,对应p)INSTR(name1, '.'):返回点.的索引位置(abc_primary.log中是12)INSTR(name1, '.') - INSTR(name1, '_') - 1:计算要截取的字符长度,12-4-1=7,正好是primary的字符数
执行这段SQL后,你会得到两个结果列,分别是primary和secondary,完全符合你的需求~
内容的提问来源于stack exchange,提问作者goldenbutter
相关产品推荐
相关产品推荐

