首页 > 数据库 >【Oracle】列拆行/对多行数据的单行数据进行分割并多行显示

【Oracle】列拆行/对多行数据的单行数据进行分割并多行显示

时间:2024-01-10 17:37:03浏览次数:43  
标签:多行 分割 level 数据 单行 Oracle 拆行

【Oracle】列拆行/对多行数据的单行数据进行分割并多行显示

参考链接:Oracle 一行字符串拆分为多行_oracle一行拆分成多行-CSDN博客

背景:要对一个表的字段的内容进行分割,分隔符都是指定的


原数据:

'1','2','3','4'
'5','6','7','8'

新数据(按照逗号分割):

'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'

如果是单行的数据,一般习惯用下面的语句进行分割

select tt.ll
from (select regexp_substr(replace(XXX, ',', ' ,'), '[^,]+', 1, level) ll
from dual
connect by level <= regexp_count(XXX, ',') + 1) tt
where rownum <= regexp_count(XXX, ',') + 1

但是这种语句只能对单行数据进行操作

上网找了一下,可以用下面的语句进行多行分割

select a.*,
level lev,
regexp_count(a.code,'[^,]+') as regcou,
  regexp_substr(a.code,'[^,]+',1,level) as new_col 
from tablea a 
connect by prior a.id = a.id 
and prior dbms_random.value is not null
and level <= regexp_count(a.code,'[^,]+')

tablea中的源数据:

image

数据结果:

image

比较让人在意的是这句prior dbms_random.value is not null,好像目的是为了让这个随机数每次都输出不同的数据,防止ORACLE的检查:如果你有前后连接条件(id=PRIOR id),但是同一行数据再次出现,会报错

ERROR:ORA-01436: CONNECT BY loop in user data

加了这句以后就不会有报错提示了

标签:多行,分割,level,数据,单行,Oracle,拆行
From: https://www.cnblogs.com/jokingremarks/p/17956961

相关文章

  • Oracle 定时批量删除指定表
    --createorreplaceprocedurePF_ETL_DropBITempTableasBEGINdeclareCURSORcur_tableisselecttable_namefromall_tableswhereowner='NCOLAP'andTable_Namelike'BI_%';row_tablecur_table%ROWTYPE;s_sqlvarchar2(2000);BEGI......
  • docker安装oracle并修改服务名修改字符集
    拉取镜像dockerpullregistry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 创建容器dockerrun-d-p1521:1521--nameoracle11gregistry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g  查看容易dockerps-a 进入容器dockerexec-itoracle11gbash 切......
  • Oracle-概要文件dba_profiles(资源配置)
    DBA_PROFILES用来显示所有配置文件及其限制。在11g数据库环境中,dba_profiles的结构只有4个字段,分别是PROFILE\RESOURCE_NAME\RESOURCE_TYPE\LIMIT;在12c及以上的Oracle数据库中,新增了COMMON\INHERITED\IMPLICIT。1.通过select语句查看所有配置及限制。select*fromdba_profil......
  • Oracle 10g enqueue waits
    Oracle10genqueuewaitsEnqueueTypeDescriptionenq:AD–allocateAUSynchronizesaccessestoaspecificOSM(OracleSoftwareManager)diskAUenq:AD–deallocateAUSynchronizesaccessestoaspecificOSMdiskAUenq:AF–tasks......
  • oracle清空表恢复办法
    今天我不小心把正式库订单表数库都清空了,兄弟们!!!!!!!!!!!!我强迫自己冷静下来,百度搜索解决办法。希望大家别碰到这种事,太后怕了呜呜呜呜呜我自己总结一下1、查询某个时间点之前的数据(如果没数据库,多试几个时间点)select*from表名asoftimestampto_timestamp('2024-01-1009:09:00','......
  • Oracle-使用dbms_metadata.get_ddl()获取对象的定义
    dbms_metadata.get_ddl()用于获取对象的ddl,其具体用法如下。注意:在sqlplus里,为了更好的展示DDL,需要设置如下参数:setline200setpagesize0setlong99999setfeedbackoffsetechooff1)获得表、索引、视图、存储过程、函数的DDLselectdbms_metadata.get_ddl('TABLE','TABLE_......
  • Linux/Oracle-说说我知道的date
    在linux系统中,你可以直接使用命令date查看当前操作系统的时间。例如:--在UOS中,这样显示ywbaoyw@xxx@baoyw-b:~/Desktop$date2024年01月09日星期二11:18:10CSTywbaoyw@xxx@baoyw-b:~/Desktop$--在Linux中,这样显示[root@oracle-baoyw]#dateTueJan911:19:49CTS2024[r......
  • oracle进程详解
     ......
  • oracle复合索引怎么建立
    在Oracle中,可以使用以下语法来创建复合索引:CREATEINDEXindex_nameONtable_name(column1,column2,...);其中,index_name是你给索引起的名称,table_name是要在其上创建索引的表名,column1,column2,...是要包含在索引中的列名(按照你希望的顺序)。以下是一个示例,展示如何创建......
  • Oracle 23C新特性——SQL防火墙(SQL Firewall)
    一、SQL防火墙功能简介SQL防火墙通过监控和阻止未经授权的SQL和SQL注入来工作。它内置了一系列规则,可以识别和阻止常见的SQL注入,如布尔型注入、报错注入、联合查询注入、堆叠查询注入等。此外,它还可以通过基于角色的访问控制(RBAC)来限制用户的访问权限,从而防止SQL注入。<br/>......