在 Oracle SQL 中,可以使用 CONNECT BY LEVEL 和 REGEXP_SUBSTR 函数来将一字段中用逗号分隔的数据拆分为多行。具体的步骤如下:
假设我们有一个表 t1,其中包含了一个字段 str,其中的数据是用逗号分隔的。
CREATE TABLE t1 (id NUMBER, str VARCHAR2(100));
INSERT INTO t1 VALUES (1, 'a,b,c');
INSERT INTO t1 VALUES (2, 'd,e');
我们需要将 str 中的数据拆分成多行,可以使用以下 SQL 语句:
SELECT t1.id,
trim(regexp_substr(t1.str, '[^,]+', 1, level)) str
FROM t1
CONNECT BY LEVEL <= length(t1.str) - length(replace(t1.str, ',')) + 1
AND PRIOR t1.id = t1.id
AND PRIOR sys_guid() IS NOT NULL;
这个语句中,我们使用了 CONNECT BY LEVEL 来生成多行数据,同时使用 REGEXP_SUBSTR 函数来提取每一行中的单个数据。其中 [^,]+ 表示匹配除了逗号以外的任意字符。
这个 SQL 语句的执行结果如下:
ID STR
这样我们就成功地将一字段中逗号分隔的数据拆分成了多行。