根据字段进行查询以将行拆分为 x 行

Posted

技术标签:

【中文标题】根据字段进行查询以将行拆分为 x 行【英文标题】:Make a query to split a line into x line depending on a field 【发布时间】:2014-03-27 13:10:44 【问题描述】:

我的数据库中有一行,其中包含一个带有一些名称的字段,由 ; 分隔。

我试图通过 Select 查询获得尽可能多的行,以确保我的字段中有名称。

所以,如果我进入我的数据库:

id names
1  john;jack;mike

有了这个,我必须得到这个查询:

SELECT id, split(names, ';') from table 

1 john
1 jack
1 mike

我没有其他表,所以没有加入。

我写的是:split(names, ';'),但这只是我想做的一个例子。

但我不知道如何拆分我的字段名称以像前面那样做。

我没有找到任何可以帮助我的方法,请找到方法。

我需要使用函数吗? oracle有这样的功能吗?

谢谢。

【问题讨论】:

Oracle 10g Splitting string into multiple rows的可能重复 @PeterLang 差不多,但是其他问题的答案对我不起作用,而 BhupeshC 的答案非常适合,这要归功于之前的情况。将问题与不正确答案联系起来的编辑并不真正相关。 【参考方案1】:
SELECT id, TRIM(REGEXP_SUBSTR( names, '[^;]+', 1, LEVEL)) FROM table_name
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(names, '[^;]+')) + 1
AND PRIOR id = id
AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL

SQL Fiddle

【讨论】:

完美。你能用PRIOR关键字添加最后两行的一些解释吗?

以上是关于根据字段进行查询以将行拆分为 x 行的主要内容,如果未能解决你的问题,请参考以下文章

Mysql查询根据两列动态将行转换为列

Crystal Report,根据Criteria将行分组为单行

根据第一列中的字母数将行与上一行连接起来

使用 PIVOT 将行转换为列

根据条件将行转换为列

将行数据转换为列