oracle 字符串转成行

孝义家在北京

孝义家在北京

2016-02-19 09:31

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的oracle 字符串转成行,希望大家看完后能赶快学习起来。
SELECT   SUBSTR (T.RPT_ID,
                INSTR (T.RPT_ID,',',1,C.LV)+ 1,
                INSTR (T.RPT_ID,',',1,C.LV + 1)- (INSTR (T.RPT_ID,',',1,C.LV)+ 1))
            AS RPT_ID
  FROM   (SELECT ',' || '85,86,87' || ',' RPT_ID,
                 LENGTH ('85,86,87' || ',') - NVL (LENGTH (REPLACE ('85,86', ',')), 0) CNT
            FROM DUAL) t,
         (SELECT LEVEL lv
            FROM DUAL
          CONNECT BY LEVEL = LENGTH('85,86,87' || ',') - NVL(LENGTH(REPLACE('85,86,87', ',')), 0)) c
 WHERE   T.cnt = c.lv
说明:CNT表示串里面有多少字符。
当是字符串是表中的字段时,取level=最大个数
如:
1).取最大个数
SELECT MAX(LENGTH(RPT_ID || ',') -
            NVL(LENGTH(REPLACE(RPT_ID, ',')), 0)) INTO v_c
    FROM DIM_AUDIT_TABLE@sjmh_inter;
2).l转成行
SELECT T.T_NAME,
                       T.T_NAME_COMM,
                       T.T_COLUMN,
                       T.T_COLUMN_COMM,
                       t.COMMENT_NL,
                       t.COMMENT_NL_TIME,
                       t.SEQ_USER_ID,
                       SUBSTR(T.RPT_ID,
                              INSTR(T.RPT_ID, '','', 1, C.LV) + 1,
                              INSTR(T.RPT_ID, '','', 1, C.LV + 1) -
                              (INSTR(T.RPT_ID, '','', 1, C.LV) + 1)) AS RPT_ID
                  FROM (SELECT A.T_NAME,
                               A.T_NAME_COMM,
                               A.T_COLUMN,
                               A.T_COLUMN_COMM,
                               a.COMMENT_NL,
                               a.COMMENT_NL_TIME,
                               a.SEQ_USER_ID,
                               '','' || A.RPT_ID || '','' RPT_ID,
                               LENGTH(A.RPT_ID || '','') -
                               NVL(LENGTH(REPLACE(A.RPT_ID, '','')), 0) CNT
                          FROM DIM_AUDIT_TABLE@sjmh_inter A
                         WHERE a.COMMENT_NL is not null) T,
                       (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL = '||v_c||') C
                 WHERE C.LV = T.CNT;

注:如果是上面代码是远程的代码,(SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL = '||v_c||') C,不要用dual表,可以改用all_objects或user_objects, 要不然能查询,但是把查询出来的SQL插入到某个表时,只能插入一行

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

oracle 字符串转成行

编程语言 网络编程
oracle 字符串转成行

ORACLE 截断字符串

编程语言 网络编程
ORACLE 截断字符串

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

字符串分割

编程语言 网络编程
字符串分割

字符串格式定义

电脑入门
字符串格式定义

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

复制字符串中的字符

编程语言 网络编程
复制字符串中的字符

ORACLE中如何实现ASCII字符串和16进制串互相转换

编程语言 网络编程
ORACLE中如何实现ASCII字符串和16进制串互相转换

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

゛如此青春゛一场阴雨 - QQ非主流分组

゛如此青春゛一场阴雨 - QQ非主流分组

Oracle 触发器的使用小结

Oracle 触发器的使用小结
下拉加载更多内容 ↓