首页 > 数据库 >Oracle CONNECT BY根据特定字符拆分字符串

Oracle CONNECT BY根据特定字符拆分字符串

时间:2023-06-30 20:46:20浏览次数:53  
标签:DUAL LEVEL VALS CONNECT 拆分 Oracle ID SELECT

1、一行

SELECT T.ID, REGEXP_SUBSTR(T.VALS, '[^,]+', 1, LEVEL) AS VAL
FROM (SELECT '101' ID, 'A,B' VALS FROM DUAL) T
CONNECT BY LEVEL <= REGEXP_COUNT(T.VALS, '[^,]+');

2、多行
2-1、如果ID唯一不重复:

SELECT T.ID, REGEXP_SUBSTR(T.VALS, '[^,]+', 1, LEVEL) AS VAL
FROM (
          SELECT '101' ID, 'A,B' VALS FROM DUAL UNION ALL
          SELECT '102' ID, 'X,X' VALS FROM DUAL
     ) T
CONNECT BY LEVEL <= REGEXP_COUNT(T.VALS, '[^,]+')
AND PRIOR T.ID = T.ID
AND PRIOR DBMS_RANDOM.VALUE() IS NOT NULL;

2-2、如果ID有重复:

SELECT T.RM, T.ID, REGEXP_SUBSTR(T.VALS, '[^,]+', 1, LEVEL) AS VAL
FROM (
       SELECT ROWNUM RM, A.* FROM ( SELECT '101' ID, 'A,B' VALS FROM DUAL UNION ALL SELECT '101' ID, 'C,D' VALS FROM DUAL UNION ALL SELECT '102' ID, 'X,X' VALS FROM DUAL ) A ) T CONNECT BY LEVEL <= REGEXP_COUNT(T.VALS, '[^,]+') AND PRIOR T.RM = T.RM AND PRIOR DBMS_RANDOM.VALUE() IS NOT NULL;

 

标签:DUAL,LEVEL,VALS,CONNECT,拆分,Oracle,ID,SELECT
From: https://www.cnblogs.com/lgx5/p/17517764.html

相关文章

  • oracle regexp_replace 去空白符
    1、去空白符SQL:SELECTregexp_replace(STR,'^\s*','*')AS"去掉左边空白符",regexp_replace(STR,'\s*$','*')AS"去掉右边空白符",regexp_replace(STR,'(^\s*)|(\s*$)','*')AS"去掉......
  • 编译python为可执行文件遇到的问题:使用python-oracledb连接oracle数据库时出现错误:DP
    错误原文:DPY-3010:connectionstothisdatabaseserverversionarenotsupportedbypython-oracledbinthinmode链接数据库方式如下:connection=create_engine("oracle+oracledb://user:password@host:post/dbname") PyCharm编译器内运行成功但编译后会有DP......
  • Oracle向包里添加新存储过程的流程
    本次使用的工具是Plsql。一般情况下修改包里的存储过程只需要在Packages找到需要修改的包,右键EditSpec即可。但是假如要重新添加一条新的存储过程,使用上诉步骤之后,后台调用新存储过程的时候会报错,因为找不到新创建的存储过程,而且此时右键View包的时候,也找不到声明的存......
  • Oracle将用户权限移植到另一个用户上
    问题描述:往往有些需求,A用户依赖于B用户创建,A用户想要获取B用户的权限,oracle没找到有命令可以直接继承,只能写一些语句来代替 1.查询用户下的权限有哪些SETPAGESIZE100SETLINESIZE200COLUMNownerFORMATA20COLUMNtable_nameFORMATA30COLUMNprivilegeFORMATA30......
  • Oracle与MySQL的最大连接数和超时时间查询与设置
    Oracle--查询最大连接数SELECTVALUEFROMv$parameterWHERENAME='processes';/*IDLE_TIME:限制每个会话所允许的最长连续空闲时间,超过这个时间会话将自动断开。(参数值是一个整数,单位是分钟,UNLIMITED不限制)CONNECT_TIME:限制指定会话的总运行时间限制,超过这个时间会话将......
  • RTE24012 直流电源 TE Connectivity 芯脉芯城
    RTE24012是一款电源模块,它提供可靠的直流电源转换功能。以下是对RTE24012的详细参数描述:输入电压范围:RTE24012的输入电压范围为18V至36V。这使得它能够适应不同的电源输入条件。输出电压:RTE24012的输出电压为12V。它提供稳定的直流电源输出,以满足设备或系统的电源需求。输出电流......
  • oracle函数 wm_concat 与 listagg
    1.wm_concatselectt.type,to_char(wm_concat(t.id||'---'||t.seq))asid_seq,to_char(wm_concat(t.seq))asseqsfrom(select'A'type,'A001'id,1seqfromdualunionallselect'A'type,'A002......
  • Oracle分批delete大表数据
    分批DELETEDROPTABLET3;CREATETABLET3ASSELECT*FROMDBA_OBJECTS;DECLARECURSORMYCURSORISSELECTROWIDFROMT3ORDERBYROWID;--按ROWID排序的CURSOR,删除条件是XXX=XXXX,根据实际情况修改TYPEROWID_TABLE_TYPEISTABLEOFROWIDINDEXBYPLS_INT......
  • oracle注入
    基础知识Oracle是一款使用较为广泛的关系型数据库,在SQL注入中他与mysql语法最大的区别就是,使用select查询时需要指定表名才能进行查询。很多时候我们在进行注入时,刚开始是不知道其表名的,所以我们得想一个办法来解决这个问题:就是使用oracle中的dual虚拟表,他是默认存在的,他里面永远......
  • oracle 11g开机自启动
    oracle11g开机自启动vi/etc/oratabPROD:/u01/app/oracle/product/11.2.0/dbhome_1:Yvi/etc/rc.d/rc.localsu-oracle-lc"/u01/app/oracle/product/11.2.0/db_1/bin/dbstart"su-oracle-lc"/u01/app/oracle/product/11.2.0/db_1/bin/lsnrctlstatusli......