问题描述
我想转换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#
,
请稍等,如果您的年龄是18c。以下是解决方法:
select * from t,lateral
(
select REGEXP_SUBSTR(text,level)||'#' as new_text
from dual
connect by REGEXP_SUBSTR(text,level) is not null
)