oracle 字符串转成行

时间:2024-01-26 01:30:13 

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插入到某个表时,只能插入一行

标签:oracle,字符串,转成行
0
投稿

猜你喜欢

  • python win32 简单操作方法

    2022-05-23 01:47:42
  • Mysql中使用时间查询的详细图文教程

    2024-01-17 16:35:54
  • PyTorch device与cuda.device用法介绍

    2022-07-26 23:49:10
  • python可视化实现KNN算法

    2022-07-23 11:17:03
  • python执行系统命令后获取返回值的几种方式集合

    2022-07-24 22:43:56
  • asp最简单的生成验证码代码

    2011-03-07 11:05:00
  • Python使用matplotlib绘制多个图形单独显示的方法示例

    2022-02-13 09:45:44
  • C#调用python.exe使用arcpy方式

    2021-03-30 05:41:13
  • TensorFlow神经网络学习之张量与变量概念

    2023-07-06 20:58:02
  • Linux RedHat下安装Python2.7开发环境

    2021-01-10 17:33:29
  • 使用 Python 快速实现 HTTP 和 FTP 服务器的方法

    2023-01-14 16:36:04
  • 利用MySQL主从配置实现读写分离减轻数据库压力

    2024-01-18 10:35:07
  • 使用 XSLT 解释 XML 文件

    2009-03-08 19:06:00
  • Python爬虫分析微博热搜关键词的实现代码

    2022-11-29 16:13:44
  • js实现千分符和保留几位小数的简单实例

    2023-08-21 10:03:26
  • ASP中使用Session变量的优缺点

    2007-10-01 18:02:00
  • 网页的栅格设计思考

    2007-11-09 10:33:00
  • Vue+Vux实现登录功能

    2024-04-30 10:39:45
  • 详解前端自动化工具gulp自动添加版本号

    2023-08-09 14:48:41
  • python中的Pytorch建模流程汇总

    2022-04-26 19:02:14
  • asp之家 网络编程 m.aspxhome.com