将值从行转换为列-OracleDB

问题描述

我想转换TEXT列中的值

ID      TEXT
182234  ZO-Z-000-4OB-566WD1#ZO-Z-000-4OB-566WD#ZO-Z-000-4OB-566WD2#
182245  ZO-Z-000-4OB-567WD1#ZO-Z-000-4OB-567WD#

分成单独的行(类似这样,#将成为分隔符)

    ID  TEXT
182234  ZO-Z-000-4OB-566WD1#
182234  ZO-Z-000-4OB-566WD#
182234  ZO-Z-000-4OB-566WD2#
182245  ZO-Z-000-4OB-567WD1#
182245  ZO-Z-000-4OB-567WD#

Oracle数据库18c

解决方法

您可以将分层查询与REGEXP_SUBSTR()函数一起使用:

SELECT id,REGEXP_SUBSTR(text,'[^#]+',1,level)||'#' AS text
  FROM t
 CONNECT BY level <= REGEXP_COUNT(text,'#')
    AND PRIOR SYS_GUID() IS NOT NULL
    AND PRIOR id = id;

ID      TEXT
------  ---------------------
182234  ZO-Z-000-4OB-566WD1#
182234  ZO-Z-000-4OB-566WD#
182234  ZO-Z-000-4OB-566WD2#
182245  ZO-Z-000-4OB-567WD1#
182245  ZO-Z-000-4OB-567WD#

Demo

,

请稍等,如果您的年龄是18c。以下是解决方法:

select * from t,lateral
(
    select REGEXP_SUBSTR(text,level)||'#' as new_text
    from dual 
    connect by REGEXP_SUBSTR(text,level) is not null
)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...