Oracle分割数据用逗号一列归纳(oracle 一列 逗号)

Oracle分割数据:用逗号一列归纳

Oracle数据库是一种关系型数据库管理系统,不仅可用于数据存储、检索等工作,而且它也提供了非常有效的数据处理方法。其中,一项处理数据的操作就是分割数据。

在日常工作中,我们经常需要从Oracle表中提取数据,将其转换为适合我们需要的格式。如果源数据中包含分隔符,如逗号、分号、冒号等,那么为了更方便地处理数据,我们需要将其分割,然后归纳到一列中。本文将介绍如何使用Oracle SQL语句来实现这一操作。

假设我们有以下的数据表,其中包含了一列名为“info”的字符串,它们以逗号作为分隔符:

CREATE TABLE Example (
id number,
info varchar2(100)
);

INSERT INTO Example VALUES (1, 'John, Mary, David');
INSERT INTO Example VALUES (2, 'Alex, Jerry');
INSERT INTO Example VALUES (3, 'Lisa, Tom, Bob');

现在,我们要将这些字符串分割开来,并将其归纳到一个名为“name”的列中。为了实现这一功能,我们可以使用以下的Oracle SQL语句:

SELECT DISTINCT
id,
regexp_substr(info, '[^,]+', 1, LEVEL) AS name
FROM
Example
CONNECT BY
regexp_substr(info, '[^,]+', 1, LEVEL) IS NOT NULL;

在这个SQL语句中,我们使用了Oracle的常用函数之一regexp_substr()。它将从“info”列中提取每个以逗号分隔的子字符串,并将其显示在一个名为“name”的新列中。我们还使用了另一个常用函数DISTINCT,因为我们不希望在结果集中出现重复的“name”列。

最后一个关键字“CONNECT BY”是用来创建分层查询的,在我们这里,它的作用是用来逐级分割每个以逗号分隔的子字符串,并保证在每一层中只有一个匹配项。如果不使用CONNECT BY,那么我们将在结果集中得到一个独立的“name”列,其中每一行都只包含一个子字符串。

看一下结果:

| id | name  |
|----|-------|
| 1 | John |
| 1 | Mary |
| 1 | David |
| 2 | Alex |
| 2 | Jerry |
| 3 | Lisa |
| 3 | Tom |
| 3 | Bob |

如此,我们成功地将“info”列中的每个逗号分隔字符串分割归纳到一个新的名为“name”的列中。

如果您想了解有关Oracle中 regexp_substr() 函数的更多信息,请查阅Oracle官方文档。

本文介绍了使用Oracle SQL语句将数据归纳到一列中的方法。这在数据处理和转换中非常有用,我们也希望此处的示例能够对您有所帮助。


数据运维技术 » Oracle分割数据用逗号一列归纳(oracle 一列 逗号)