在甲骨文

我在Oracle数据库中的列具有这样的数据拆分列在甲骨文

column1 

/opt/log/data/abcd.efghi.jklmn.aaa.txt

/opt/log/data/abbbcd.efccghi.jkdsdflmn.abab.txt

/opt/log/data/nmvcnmcd.efjhjghi.jkvslmn.abcbc.txt

/opt/log/data/hjsdhj.hjfdhdf.hdfhjd.aghag.txt

/opt/log/data/dfhjfdhj.yureyer.qwtyq.hjahjh.txt

我想在这样的方式

**firstdot seconddot  thirdnfourthdot** 

abcd efghi jklmn.aaa

abbbcd efccghi jkdsdflmn.abab

nmvcnmcd efjhjghi jkvslmn.abcbc

hjsdhj hjfdhdf hdfhjd.aghag

dfhjfdhj yureyer qwtyq.hjahjh

我能得到的数据拆分第二点值由

select substr(column1,instr(column1,'.',1+1,instr(column1,'.',1,2)-instr(column1,'.',1,1)-1) as secondot 

但我没有得到休息。你们能帮忙吗?

非常感谢

回答:

没有正则表达式,你需要回复同样的逻辑为你需要的每个子串,每个timi根据th的位置选择初始位置和leght该子字符串的e“终止符”。

/* input data */ 

with yourTable(column1) as (

select '/opt/log/data/abcd.efghi.jklmn.aaa.txt' from dual union all

select '/opt/log/data/abbbcd.efccghi.jkdsdflmn.abab.txt' from dual union all

select '/opt/log/data/nmvcnmcd.efjhjghi.jkvslmn.abcbc.txt' from dual union all

select '/opt/log/data/hjsdhj.hjfdhdf.hdfhjd.aghag.txt' from dual union all

select '/opt/log/data/dfhjfdhj.yureyer.qwtyq.hjahjh.txt' from dual

)

/* query */

select substr(column1, instr(column1, '/', -1) +1, instr(column1, '.') - instr(column1, '/', -1)-1) firstDot,

substr(column1, instr(column1, '.') +1, instr(column1, '.', 1, 2) - instr(column1, '.') -1) secondDot,

substr(column1, instr(column1, '.', 1, 2) +1, instr(column1, '.', 1, 4) - instr(column1, '.', 1, 2) -1) thirdAndFourthDot

from yourTable

给出:

FIRSTDOT  SECONDDOT  THIRDANDFOURTHD 

--------------- --------------- ---------------

abcd efghi jklmn.aaa

abbbcd efccghi jkdsdflmn.abab

nmvcnmcd efjhjghi jkvslmn.abcbc

hjsdhj hjfdhdf hdfhjd.aghag

dfhjfdhj yureyer qwtyq.hjahjh

在一个更可读的方式:

select substr(column1, lastSlashPos +1, firstDotPos - lastSlashPos -1) as firstDot, 

substr(column1, firstDotPos +1, secondDotPos - firstDotPos -1) as secondDot,

substr(column1, secondDotPos +1, fourthDotPos - secondDotPos -1) as thirdAndFourthDot

from (

select instr(column1, '/', -1) as lastSlashPos,

instr(column1, '.') as firstDotPos,

instr(column1, '.', 1, 2) as secondDotPos,

instr(column1, '.', 1, 3) as thirdDotPos,

instr(column1, '.', 1, 4) as fourthDotPos,

column1

from yourTable

)

回答:

select substr('/opt/log/data/abcd.efghi.jklmn.aaa.txt',instr('/opt/log/data/abcd.efghi.jklmn.aaa.txt','/',-1) + 1) from dual; 

这会给你以后最后/

文本,然后你需要申请instr.

select 

substr(text, 1, instr(text,'.', 1) - 1),

substr(text, instr(text,'.', 1) + 1, instr(text,'.', 2) - 1),

substr(text, instr(text,'.', 2) + 1)

from (

select substr('/opt/log/data/abcd.efghi.jklmn.aaa.txt',instr('/opt/log/data/abcd.efghi.jklmn.aaa.txt','/',-1) + 1) text from dual

);

以上是 在甲骨文 的全部内容, 来源链接: utcz.com/qa/265613.html

回到顶部