數據倉庫中有的字段不合格,有特殊字符,好比換行符。python
poi_name \n19013 \n12013
怎麼把換行符替換掉呢?nginx
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-StringOperatorsgit
regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)正則表達式
Returns the string resulting from replacing all substrings in INITIAL_STRING that match the java regular expression syntax defined in PATTERN with instances of REPLACEMENT. For example, regexp_replace("foobar", "oo|ar", "") returns 'fb.' Note that some care is necessary in using predefined character classes: using '\s' as the second argument will match the letter s; '\s' is necessary to match whitespace, etc.sql
官網說用兩個反斜槓代替一個,即一個反斜槓用來轉義。express
實踐了一下,不行,得4個apache
select regexp_replace(poi_name,'\\\\n','')
poi_name
19013
12013
regexp_replace函數是replace函數的擴展函數,用於經過正則表達式來進行匹配替換,默認狀況下,每次匹配到的正則,都替換爲replace_string,返回的字符串與source_char字符集相同。若是source_char爲非LOB類型,則返回varchar2數據類型,若是爲LOB類型,則返回CLOB類型,該函數符合POSIX正則和Unicode正則。
source_char是一個用做搜索的值,它一般是一種字符列,能夠如下是任何數據類型CHAR、VARCHAR二、NCHAR、NVARCHAR二、CLOB、NCLOB
pattern是正則表達式,能夠是如下任意數據類型CHAR、VARCHAR二、NCHAR、NVARCHAR2。最多可包含512個字節。若是pattern數據類型與source_char異同,則Oracle將轉換pattern的數據類型與source_char的一致。
replace_string能夠是如下任意數據類型CHAR、VARCHAR二、NCHAR、NVARCHAR二、CLOB、NCLOB。若是replace_string是CLOB或NCLOB,則Oracle截斷replace_string爲32K。replace_string可含有多達500個反向引用做爲子表達式,其形式爲\n,n爲數字1~9。若是n在replace_string中爲反斜線字符,則需使用轉移字符在其前面(\)
SQL> select regexp_replace('+86 13811112222','(\+[0-9]{2})( )([0-9]{3})([0-9]{4})([0-9]{4})','(\1)\3-\4-\5') as new_str from dual;