2009-01-02 40 views
11

我們有一個帶有varchar2(100)列的表,該列偶爾包含回車符&換行符。我們希望刪除SQL查詢中的那些字符。我們使用:Oracle REPLACE()函數未處理回車符和換行符

REPLACE(col_name, CHR(10)) 

具有沒有效果,但更換「CHR(10)」一個更加傳統的「信」字證明,替換功能工作,否則。我們還發現,

REPLACE(col_name, CHR(10), '_') 

發現新線的位置,但插入下劃線後,而不是取代它。

在Oracle8i上運行。升級不是一種選擇。

回答

31

另一種方法是使用TRANSLATE

TRANSLATE (col_name, 'x'||CHR(10)||CHR(13), 'x') 

的「x」是你不想翻譯成空的任何字符,因爲翻譯如果工作不正常第三個參數是空的。

+0

您能否詳細說明代碼的'x'部分?我沒有跟隨。我知道你需要指定一個替換,但爲什麼你需要在第二個參數的開頭加入替換? – 2013-04-25 11:56:49

12

你確定你的換行​​符不是CHR(13) + CHR(10),在這種情況下,你最後會看到CHR(13) + '_',它可能看起來像換行符?

嘗試REPLACE(col_name, CHR(13) + CHR(10), '')

+0

謝謝你,這真的幫了我。我必須使用CSV(我沒有選擇這個...)將一些數據庫內容導出到外部系統,並且我想將回車符轉換爲一個簡單的點。只是想補充一點,我對「+」符號有語法錯誤,不得不用「||」替換它,像這樣:REPLACE(col_name,CHR(13)|| CHR(10),'')' – 2017-05-24 10:42:25

5

如果在數據庫中的數據是從HTML表單TextArea控件貼出來,不同的瀏覽器使用不同的換行字符:

Firefox的分離與CHR線(10)僅

互聯網資源管理器分離與CHR(13)+ CHR線(10)

蘋果(預OSX)分離與CHR(13)線僅

所以你可能需要這樣的東西:

set col_name = replace(replace(col_name, CHR(13), ''), CHR(10), '') 
15

啊哈!凱德在錢上。

TOAD中的工件打印\r\n作爲兩個佔位符「blob」字符,但打印一個\r也作爲兩個佔位符。向溶液中的第一步驟是使用..

REPLACE(col_name, CHR(13) || CHR(10)) 

..但我選擇了稍微更健壯..

REPLACE(REPLACE(col_name, CHR(10)), CHR(13)) 

..這捕獲以任何順序冒犯字符。我非常感謝凱德。

M.

+0

DUMP()函數是一個很好的方法來檢查列的真實內容,如有疑問 – 2009-01-04 01:52:24

0

如果您的換行符是CRLF,那意味着它是CHR(13),然後是CHR(10)。如果你REPLACE(input, CHR(10), '_'),那變成CHR(13)後跟一個下劃線。由於CR本身就可以像一個換行符一樣呈現,所以會出現,就好像下劃線在你的換行符後插入了一樣,但是實際上是只有一半換行符已被替換。

使用REPLACE(REPLACE(input, CHR(13)), CHR(10))來代替所有的CRLF's。

1

只想放下一張紙條。我在格式化文本4000字段時遇到了麻煩,這個字段有自己的想法,文本會在報表中隨機顯示(或不換行)。當我使用上述替換chr(10)更新列時。我的報告最終格式化爲我想要的。多謝!

相關問題