Oracle利用行拆分功能实现多行数据(oracle行拆分多行)

转一行

在数据库操作中经常会用到行拆分的功能,其作用是使多行的数据转换成数个字段的一行数据,比如一行形成的接口文件需要转换成多行放入数据库中。Oracle 可以采用行拆分函数来实现这个功能,将一行的数据分解成多行,实现上面的功能。

例如在表中有一列,数据样式如下:

| ID | Letter |

| :————- | :————- |

| 1 | A,B,C|

而我们想对这一列的数据做处理,实现输出如下结果:

| ID | Letter |

| :————- | :————- |

| 1 | A |

| 1 | B |

| 1 | C |

那么可以使用Oracle数据库的方法实现:

“`sql

SELECT id,

TRIM(REGEXP_SUBSTR(Letter, ‘[^,]+’, 1, LEVEL)) AS LETTER

FROM t

CONNECT BY REGEXP_SUBSTR(Letter, ‘[^,]+’, 1, LEVEL) IS NOT NULL;


在上面的例子中我们将id和letter解析成了两列,其中id直接从原来的表中拿出来的,letter则是使用新的函数regrep_substr从之前的一行的letter中拆解出来的。

REGEXP_SUBSTR函数的功能是搜索匹配的子串,’[^,]’是用来指定搜索的模式的一种正则表达式,用来从一整段的文本中提取出我们想要的内容。LEVEL用来提取出文本中匹配字符串的次数。该函数返回一个字符串,根据LEVEL的不同可以拆分出多行结果。

CONNECT BY用来处理行拆分功能,用来根据LEVEL的变化拆分出多行,并且只有当REGEXP_SUBSTR函数返回的字符串不为空的情况下,才会拆分成多行数据。

最后,我们的查询功能就实现了,它可以将原来一行形成的多个字符串拆分开来,分别放入id和letter中,达到了预期的行拆分功能。

数据运维技术 » Oracle利用行拆分功能实现多行数据(oracle行拆分多行)