【问题标题】:Oracle split text into multiple rowsOracle 将文本拆分为多行
【发布时间】:2011-12-20 22:18:27
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: database oracle odp.net varchar


    【解决方案1】:

    可能是这样(但这完全取决于您使用的 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

    【讨论】:

    • 感谢您的回复。如果我运行您的示例,我会得到五行 + 6 至多为空。如果我在我的实际测试数据上运行,我只会得到第一行。我使用的是 oracle 10g
    • 我认为问题出在您使用的分隔符上。分隔符应该是 chr(10) 或 chr(13),而不是两者。
    • 只需替换字符串中的一个字符,以便您寻找单个分隔符......
    • 如果您的文本中某处有空行,则此答案将失效。重现:从双重的; -- 这将返回第 2 行而不是 NULL。在此处查看解决方案:stackoverflow.com/questions/25648653/…
    【解决方案2】:

    如果您的数据包含空行,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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 2014-06-09
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多