1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Oracle 单字段拆分成多行

Oracle 单字段拆分成多行

时间:2021-05-07 04:17:57

相关推荐

Oracle 单字段拆分成多行

Oracle 单字段拆分成多行

性能上方法1最优,其次方法2,方法3因为有distinct,性能差

方法1:

SELECT stuid,substr(a.stuname, instr(a.stuname, ',', 1, levels.lvl) + 1, instr(a.stuname, ',', 1, levels.lvl + 1) -(instr(a.stuname, ',', 1, levels.lvl) + 1)) as stuname,stusexFROM (SELECT stuid,',' || stuname || ',' AS stuname,stusex,length(stuname) - nvl(length(REPLACE(stuname, ',')), 0) + 1 AS cnt --取待拆分字段每行按照分隔符','分割后的记录数,用于connect byFROM T_STU) a,(SELECT rownum AS lvl --产生一个待拆分字段分割后最大记录数的序列FROM (SELECT MAX(length(stuname || ',') - nvl(length(REPLACE(stuname, ',')), 0)) max_len FROM T_STU)CONNECT BY LEVEL <= max_len) levelsWHERE levels.lvl <= t --笛卡尔连接ORDER BY stuid;

方法2:

SELECTSTUID,REGEXP_SUBSTR (STUNAME, '[^,]+', 1, lv) STUNAME,STUSEXFROMT_STU,(SELECTLEVEL lvFROMdual CONNECT BY LEVEL < 10) bWHEREb.lv <= REGEXP_COUNT (T_STU.STUNAME, '\,') + 1ORDER BYSTUID;

方法3:

SELECT DISTINCTSTUID,REGEXP_SUBSTR (STUNAME, '[^,]+', 1, LEVEL) STUNAME,STUSEXFROMT_STU CONNECT BY LEVEL <= LENGTH (STUNAME) - LENGTH (REPLACE(STUNAME, ',', '')) + 1ORDER BYSTUID;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。