2014-03-27 42 views
1

我在我的数据库中有一行,包含一些名称的字段,用;分隔。查询根据字段将行拆分为x行

我想通过Select查询获取尽可能多的行,以便在我的字段中有名称。

所以,如果我在DB有:

id names 
1 john;jack;mike 

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

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

1 john 
1 jack 
1 mike 

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

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

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

我没有发现任何东西来帮助我,找到一种方法来做到这一点。

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

谢谢。

+0

可能重复http://stackoverflow.com/questions/14328621/oracle-10g-splitting-string-into-multiple-行) –

+0

@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

[Oracle 10g的分割字符串转换成多行(的
+0

这是完美的。你可以用'PRIOR'关键词来补充一下,最后两行的解释吗? –