将值从行转换为列-OracleDB

时间:2020-09-17 09:49:19

标签: sql regex string oracle split

我想转换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

2 个答案:

答案 0 :(得分:2)

您可以将分层查询与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

答案 1 :(得分:0)

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

select * from t,
lateral
(
    select REGEXP_SUBSTR(text,'[^#]+',1,level)||'#' as new_text
    from dual 
    connect by REGEXP_SUBSTR(text,'[^#]+',1,level) is not null
)
相关问题