数据如上图所示
需要将数据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;
