我的一个Oracle DB中有一个名为'STATS1'的列名。以下是此列下的字段值 -
010112.TMD.ORG1
010112.F99.DEFAULT
010112.F20
010112.F16.ORG2.XYZ12
现在,我想写一个sql查询将上面的字符串拆分成多个。下面是我正在寻找的使用SQL substr和instr函数的O / P格式。
ACCOUNT GRPID ORG REL
======= ===== ==== ====
010112 TMD ORG1
010112 F99 DEFAULT
010112 F20
010112 F16 ORG2 XYZ12
答案 0 :(得分:2)
select
regexp_substr(column, '[^.]+', 1, 1) as account
, regexp_substr(column, '[^.]+', 1, 2) as grpid
, regexp_substr(column, '[^.]+', 1, 3) as org
, regexp_substr(column, '[^.]+', 1, 4) as rel
from your_table
答案 1 :(得分:1)
使用SUBSTR和INSTR代替REGEXP_SUBSTR来显示不太优雅的解决方案:-)您可以在列中添加分隔符,以便使用INSTR而不会有找不到第n个分隔符的危险。
with formatted as
(
select '.' || col || '....' as col
from mytable
)
select
substr(col, instr(col, '.', 1, 1) + 1, instr(col, '.', 1, 2) - instr(col, '.', 1, 1) - 1) as aaa,
substr(col, instr(col, '.', 1, 2) + 1, instr(col, '.', 1, 3) - instr(col, '.', 1, 2) - 1) as aaa,
substr(col, instr(col, '.', 1, 3) + 1, instr(col, '.', 1, 4) - instr(col, '.', 1, 3) - 1) as aaa,
substr(col, instr(col, '.', 1, 4) + 1, instr(col, '.', 1, 5) - instr(col, '.', 1, 4) - 1) as aaa
from formatted;