裏面一個VARCHAR2列我有文本值,如:甲骨文拆分文本多行
aaaaaa. fgdfg.
bbbbbbbbbbbbbb ccccccccc
dddddd ddd dddddddddddd,
asdasdasdll
sssss
如果我從表做選擇列其中id = ...我得到了一個單行的全部文本, 一般。 但我想在多行中得到結果,上面的例子是5。 我只需要使用一條select語句,並且分隔符將被換行或回車(oracle中的chr(10),chr(13))
謝謝!
裏面一個VARCHAR2列我有文本值,如:甲骨文拆分文本多行
aaaaaa. fgdfg.
bbbbbbbbbbbbbb ccccccccc
dddddd ddd dddddddddddd,
asdasdasdll
sssss
如果我從表做選擇列其中id = ...我得到了一個單行的全部文本, 一般。 但我想在多行中得到結果,上面的例子是5。 我只需要使用一條select語句,並且分隔符將被換行或回車(oracle中的chr(10),chr(13))
謝謝!
這樣,也許(但一切都取決於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
由凱文·伯頓的回答包含一個錯誤,如果你的數據包含空線。 根據發明的解決方案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;
感謝您的回覆。如果我運行你的例子,我得到五行+6更多至極爲空。如果我運行我的實際測試數據,我只得到第一行。我使用oracle 10g – maephisto
我認爲問題出在你使用的分隔符上。分離器應該是chr(10)或chr(13),而不是兩者。 – maephisto
只是替換字符串中的一個chanracters,所以你正在尋找一個單一的分隔符.... –