在分隔符处拆分列值

时间:2014-05-14 09:00:36

标签: sql oracle

我的一个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

2 个答案:

答案 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;