oracle sql将字符串拆分为行

时间:2016-01-13 08:16:41

标签: sql oracle select oracle11g

我有字符串' ABC'我需要分成如下行

A
B
C

。我知道当分隔符存在时该怎么做。当分隔符不存在时怎么样

with test as
(select 'A,B,C' col1 from dual)
  select regexp_substr(col1, '[^,]+', 1, rownum) result1
  from test
  connect by level <= length(regexp_replace(col1, '[^,]+')) + 1;

2 个答案:

答案 0 :(得分:4)

如果没有分隔符,它应该更容易 - 使用相同的方法,但只需使用substrangular-moment作为字符串的索引:

level

答案 1 :(得分:0)

您可以使用这样的功能

-- define type
CREATE OR REPLACE TYPE TABLE_OF_STRING AS TABLE OF VARCHAR2(32767);

-- function
function SPLIT_STRING_TO_STRINGS
  (
    p_list varchar2,
    p_delimiter varchar2 := ','
  ) return TABLE_OF_STRING pipelined
  is
    l_idx    pls_integer;
    l_list    varchar2(32767) := p_list;
  begin
    loop
        l_idx := instr(l_list, p_delimiter);
        if l_idx > 0 then
            pipe row(substr(l_list, 1, l_idx-1));
            l_list := substr(l_list, l_idx + length(p_delimiter));
        else
            pipe row(l_list);
            exit;
        end if;
    end loop;
    return;
  end SPLIT_STRING_TO_STRINGS;

-- usage example
select * from table(SPLIT_STRING_TO_STRINGS('A,B,C',','))