ITPub博客

首页 > 数据库 > Oracle > regexp_substr和wm_concat使用举例

regexp_substr和wm_concat使用举例

原创 Oracle 作者:LuiseDalian 时间:2014-06-17 07:15:23 0 删除 编辑

/* ******************* 需求 ******************************************************************/

/* A表:A1 字段  数据为'1,2'和'3,4'                                                           */

/* B表:B1 字段  数据为'3,4'和'4,5'                                                           */

/* 怎么样的SQL才能将查询的结果放入                                                           */

/* C表:C1 字段  数值不能重复如A表和B表  的联合查询的结果C1字段数据应是'1,2,3,4'和'3,4,5'(有去重的操作) */

/* A1, B1, C1列的数据类型均为VARCHAR2                                                        */

 

--测试数据

CREATE TABLE TA(A1 VARCHAR2(10));

INSERT INTO TA VALUES('1,2');

INSERT INTO TA VALUES('3,4');

 

 

CREATE TABLE TB(B1 VARCHAR2(10));

INSERT INTO TB VALUES('3,4');

INSERT INTO TB VALUES('4,5');

 

COMMIT;

 

CREATE TABLE TC(C1 VARCHAR2(20));

 

 

CREATE TABLE TTMP(col1 VARCHAR2(50));

DELETE FROM ttmp;

 

--4,就是,号的个数 + 1(可以用函数计算出来的)

INSERT INTO ttmp

SELECT regexp_substr(col1, '[^,]+', 1, level) AS res from (select wm_concat(a1) col1 FROM TA)

connect by level <= 4;

 

 

INSERT INTO TC

SELECT wm_concat(col1) FROM (SELECT DISTINCT col1 FROM ttmp);

 

--对TB重复前面的操作

DELETE FROM ttmp;

INSERT INTO ttmp

SELECT regexp_substr(col1, '[^,]+', 1, level) AS res from (select wm_concat(b1) col1 FROM TB)

connect by level <= 4;

 

INSERT INTO TC

SELECT wm_concat(col1) FROM (SELECT DISTINCT col1 FROM ttmp);

 

SELECT * FROM TC;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1184364/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    6046585