oracle一列拆分为多列

来源:这里教程网 时间:2026-03-03 17:51:51 作者:

数据如上图所示 需要将数据name 按照空格进行炒粉多列 1、首先判断name列最长的空格个数是多少: select max(length(regexp_replace(name,'[^ ]+',''))) from czx; 可见,最长的空格个数是8,那么我们就创造如下sql:

select id, f_new_rowit(name, ' ', 1) v1, f_new_rowit(name, ' ', 2) v2, f_new_rowit(name, ' ', 3) v3, 
f_new_rowit(name, ' ', 4) v4, f_new_rowit(name, ' ', 5) v5, f_new_rowit(name, ' ', 6) v6, 
f_new_rowit(name, ' ', 7) v7, f_new_rowit(name, ' ', 8) v8,age from czx ;

在oracle用户下创建函数f_new_rowit:

create or replace function f_new_rowit(in_text varchar2,--要截取的字符串
                                       fh      varchar2,--截取识别符号
                                       n       number)--按第几个符号截取
                                        return varchar2 is
  Result varchar2(4000);
begin
  if n > 1 then
    SELECT substr(in_text,
                  
                  decode(instr(in_text, fh, n - 1, n - 1),
                         0,
                         0,
                         instr(in_text, fh, n - 1, n - 1) + 1),
                  
                  decode(sign(instr(in_text, fh, n, n) -
                              instr(in_text, fh, n - 1, n - 1)),
                         1,
                         (instr(in_text, fh, n, n) -
                         instr(in_text, fh, n - 1, n - 1)) - 1,
                         -1,
                         length(in_text),
                         0,
                         0)
                  
                  )
      into Result
      FROM dual;
  else
    select substr(in_text, 0, instr(in_text, fh, 1, 1) - 1)
      into Result
      from dual;
  end if;
  return(Result);
end f_new_rowit;

相关推荐