2011-07-11 212 views
1

我在Oracle中將以下字符串作爲一個連續的行,而不是將該信息顯示爲一個連續的字符串,實際上我希望在出現「 :F」和‘:L’,這也將需要移除的‘:’F之前和L基於特定字符串匹配的分隔字符串

所以當前字符串:

F:AA BB:F:BB CC dd:F:ZZ Xx Y:L:Hello:F:Goodbye 

最新顯示的字符串:

F:AA BB 
F:BB CC dd 
F:ZZ Xx Y 
L:Hello 
F:Goodbye 

試圖在Oracle pl/sql中實現這個簡潔功能,以便我可以傳入當前字符串並通過回車/換行符取回新字符串。

希望有人能指出我正確的方向。

謝謝。

+0

這是不錯的一個 – user2001117

回答

7

我不認爲你需要正則表達式。簡單的替換應該做的伎倆。

new_val := REPLACE(REPLACE(string_val, ':F:', CHR(10)||'F:') 
        , ':L:', CHR(10)||'L:'); 

這給出了unix風格的新行。如果你想要windows換行符,那麼你需要使用CHR(13)||CHR(10)而不是僅僅CHR(10)

你也可以在查詢中使用它。

+0

Perfecto @Sodved - 我不得不爲我的要求添加CHR(13)|| CHR(10)。好工作。謝謝。 – tonyf

1

而只是爲了在regular expression replace方式拋出:

with TestData as(
select 'F:AA BB:F:BB CC dd:F:ZZ Xx Y:L:Hello:F:Goodbye' text from dual 
) 

select testData.text , 
     REGEXP_REPLACE(testData.text, '(:)([F|L]+:)',CHR(13)||CHR(10) || '\2') REG_REP 
    from testData 

; 
TEXT           REG_REP                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
---------------------------------------------- ----------- 
F:AA BB:F:BB CC dd:F:ZZ Xx Y:L:Hello:F:Goodbye F:AA BB                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
               F:BB CC dd                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
               F:ZZ Xx Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
               L:Hello                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
               F:Goodbye 

REGEXP_REPLACE(testData.text, '(:)([F|L]+:)',CHR(13)||CHR(10) || '\2') 

()標記分組,可能是在參考文獻中的\ GroupPosition代替#

(:)([F|L]+:) 

漂亮很多人說是找一個:然後是F:或L:

CHR(13)||CHR(10) || '\2' 

然後將找到的文本替換爲「CHR(13)|| CHR(10)||」 +第二組

0

使用正則表達式:

select REGEXP_REPLACE('F:AA BB:F:BB CC dd:F:ZZ Xx Y:L:Hello:F:Goodbye', 
         (\:+)(F|L{1})(\:+)', 
         chr(13)||chr(10)||'\2\3') 
from dual; 

是更好地匹配模式。