2017-04-09 95 views
1

我在遷移從MySQL到PostgreSQL,Postgres的查詢,其中值包含反斜槓

DB的過程中,我有出色的最後一兩件事:在表steps有一列overlay_custom_css。在customer_overlay_css數據的

實施例: left:957px;\r\ntop:594px;\r\nwidth:68px;\r\nheight:30px;

我需要從這個數據中去除\r\n。據我瞭解,在\是一個特殊的字符因此必須由另一個轉義\

來源:https://www.postgresql.org/docs/8.3/static/functions-matching.html

這是我到目前爲止有:

UPDATE 
    steps 
SET 
    overlay_custom_css = REPLACE(overlay_custom_css,'\\r\\n','') 
WHERE 
    overlay_custom_css LIKE '%\\r\\n%'; 

我運行此之後,它說,它影響了200多行,但查看我的數據沒有什麼區別。

任何人都可以告訴我我要去哪裏嗎?

回答

1

您可以使用regexp_replace

select regexp_replace(overlay_custom_css,'\\r\\n','','g') 
+0

Thanks,this worked'UPDATE steps SET overlay_custom_css = regexp_replace(overlay_custom_css,'\\ r \\ n','','g')' – Brad

1

要使用C-style escapes你需要使用E''

的PostgreSQL還接受「越獄」字符串常量,這是一個擴展SQL標準。通過在打開單引號之前寫入字母E(大寫或小寫)來指定轉義字符串常量,例如E'foo'。 (當在行之間繼續使用轉義字符串常量時,請僅在第一次打開引號之前寫入E)。在轉義字符串中,反斜槓字符()開始一個類似C的反斜槓轉義序列,其中反斜槓和後面的字符組合)表示一個特殊的字節值,如表4-1所示。

所以它看起來像這樣,

SELECT x, replace(x, E'\r\n', '') 
FROM (VALUES 
    (E'foo\r\nbar') 
) AS t(x); 
+0

感謝您的回答,雖然這並沒有工作,但我懷疑由於類似的子句工作'E'%\ r \ n%''但在任何情況下,問題都解決了。 Ty – Brad