Oracle将文本拆分为多行

时间:2011-11-03 06:53:41

标签: database oracle odp.net varchar

在varchar2列中,我有以下文本值:

aaaaaa. fgdfg.
bbbbbbbbbbbbbb ccccccccc
dddddd ddd dddddddddddd,
asdasdasdll
sssss

如果我从表中选择列,其中id = ... 我通常会将整个文本放在一行中。 但我希望得到多行的结果,上面的例子为5。 我只需要使用一个select语句,分隔符将是新行或回车符(chr(10),oracle中的chr(13))

谢谢!

2 个答案:

答案 0 :(得分:3)

像这样,也许(但这完全取决于你使用的oracle版本):

WITH yourtable AS    (SELECT REPLACE('aaaaaa. fgdfg.' ||chr(10)||           
                        'bbbbbbbbbbbbbb ccccccccc  ' ||chr(13)|| 
                        'dddddd ddd dddddddddddd,' ||chr(10)||
                        'asdasdasdll  ' ||chr(13)||
                        'sssss '||chr(10),chr(13),chr(10)) AS astr FROM DUAL)
SELECT REGEXP_SUBSTR ( astr, '[^' ||chr(10)||']+', 1, LEVEL) data   FROM yourtable   
CONNECT BY LEVEL <= LENGTH(astr) - LENGTH(REPLACE(astr, chr(10))) + 1

请参阅:Comma Separated values in Oracle

答案 1 :(得分:0)

如果您的数据包含空行,Kevin Burton的答案包含错误。 基于发明here的解决方案,下面的改编是有效的。检查该帖子以获得有关问题和解决方案的解释。

WITH yourtable AS    (SELECT REPLACE('aaaaaa. fgdfg.' ||chr(10)||           
                    'bbbbbbbbbbbbbb ccccccccc  ' ||chr(13)|| 
                    chr(13)||
                    'dddddd ddd dddddddddddd,' ||chr(10)||
                    'asdasdasdll  ' ||chr(13)||
                    'sssss '||chr(10),chr(13),chr(10)) AS astr FROM DUAL)
SELECT REGEXP_SUBSTR ( astr, '([^' ||chr(10)||']*)('||chr(10)||'|$)', 1,  LEVEL, null, 1) data   FROM yourtable   
CONNECT BY LEVEL <= LENGTH(astr) - LENGTH(REPLACE(astr, chr(10))) + 1;