oracle数据库拆分字段lenth*width*higth字段

oracle数据库拆分字段lenth*width*higth字段,第1张

建表,模拟上面说的情况,一个字符串字段和三个数值字段,并增加一些记录。

CREATE TABLE t (lenth number,WIDTH number,higth NUMBER,cubo VARCHAR2(100));

INSERT INTO t VALUES(0,0,0,'1002050');

INSERT INTO t VALUES(0,0,0,'2001040');

思路是,增加一个中间字段,用字符串赋值中间字段,逐项分离,最后删掉中间字段。

ALTER TABLE t ADD(mid VARCHAR2(100));

UPDATE t SET mid=cubo;

UPDATE t SET lenth=SUBSTR(mid,1,instr(mid,'')-1),mid=SUBSTR(mid,instr(mid,'')+1);

UPDATE t SET WIDTH=SUBSTR(mid,1,instr(mid,'')-1),mid=SUBSTR(mid,instr(mid,'')+1);

UPDATE t SET higth=mid;

ALTER TABLE t DROP COLUMN mid;

with sleest as(

    select 1 rn,1111111111  a, 1 b, 'c1' c ,'d1' d from dual

     union all

    select 2,222222 , 3 , 'c2' ,'d2' from dual

)

--select  from sleest;

select distinct

       --new_rn第一条存值,后续为空

       case when levelscolumn_value >1 then null else trn end as new_rn,  

       trn,

       levelscolumn_value as sub_order,  

       --4可以通过参数传递

       trim(regexp_substr(ta, '({1,4})', 1, levelscolumn_value))  as a,  

       tb,

       --c第一条存值,后续为空

       case when levelscolumn_value >1 then null else tc end as c ,

       td

  from sleest t,

       table(

         cast(

           multiset(

             --4可以通过参数传递

             select level from dual connect by  level <= length(regexp_replace(trim(regexp_replace(ta,'({4})','\1 ')), '[^ ]+'))  + 1

           ) as sysOdciNumberList

         )

        ) levels

order by rn, sub_order

构造临时数据:

根据需求参数4进行划分:

参考stackover上的一个解决方案改的,原文地址如下:

>

以上就是关于oracle数据库拆分字段lenth*width*higth字段全部的内容,包括:oracle数据库拆分字段lenth*width*higth字段、oracle数据库,结果集拆分重构。、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9443250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存