2017-04-13 378 views
1

我想用我的數據庫中的自由文本字段中的空格替換所有管道和換行符。如何使用Teradata中的regexp_replace替換管道(|)和空間?

我目前的做法如下所示:

SELECT ID, REGEXP_REPLACE(REGEXP_REPLACE(FREETEXT,'|',‘ ‘),‘\n',' ') FROM TABLE

我的想法是,以取代管道|與一個空間,然後結果再次檢查和所有linebreaks被替換。現在的問題是,那裏仍然有管道,因爲我的分隔符是| |,所以混亂了CSV。

希望任何人都可以幫助我。

PS:我無法將分隔符更改爲別的。

回答

1

管道符號是正則表達式中的一個特殊字符,將它分成多個選項,因此您必須將其轉義。

如果您要更換所有管道和換行符,你不必巢:

RegExp_Replace(FREETEXT,'[\|\n\r]',' ') 

\| pipe 0x7C 
\n line feed 0x0A 
\r carriage return 0x0D 

但那些是單個字符,你可以簡單地使用

OTranslate(FREETEXT, '7C0A0D'xc,' ') 

只有當你想要用單個空格替換這些字符的連續出現,您需要一個RegEx:

RegExp_Replace(FREETEXT,'[\|\n\r]+',' ') 
+0

感謝您的答覆那麼,你最後一個例子的結尾會做什麼? –

+0

@MickyMaus:它用一個空格替換多個連續的字符,例如''a ||| b'' - >''a'b''或窗戶CRLF。 – dnoeth

+0

但它也會替換單個字符嗎?再次感謝,這真的幫了我。 –