2012-06-12 93 views
3

我有一個數據庫有大約10k條記錄,其中一些包含我想要替換的HTML字符。在數據庫文本字段中替換所有出現的子字符串

例如,我可以找到所有出現:

SELECT * FROM TABLE 
WHERE TEXTFIELD LIKE '%&#47%' 

原始字符串例如:

this is the cool mega string that contains &#47

如何將所有&#47/更換?

最終的結果應該是:

this is the cool mega string that contains /

+1

使用更新語句。如果你已經有一個工作選擇,那麼它的TSQL 101寫入更新。 –

+0

@MitchWheat TSQL?這是一個PostgreSQL數據庫。 –

+0

SQL:我想你知道我的意思。 –

回答

12

如果要替換該字符串的另一個字符串或轉換,你可以使用PostgreSQL中的「替換」功能的特定字符串。舉例來說,以取代「貓」與列「MyField的」「狗」的所有出現,你會怎麼做:

UPDATE tablename 
SET myfield = replace(myfield,"cat", "dog") 

,您看合適您可以添加一個WHERE子句或任何其他邏輯。另外,如果你試圖轉換HTML實體,ASCII字符或各種編碼方案,postgre也有相應的功能。 Postgresql String Functions

3

@davesnitty給出的答案可以正常工作,但是您需要非常仔細地考慮要替換的文本模式是否可以嵌入到您不想修改的較長模式中。否則,你會發現有人的nooking a fire,這很奇怪。

如果可能,請使用合適的專用工具來解決您的問題。有URLEncoded文本?使用一個url解碼器。有XML實體?通過文本模式輸出中的XSLT樣式表處理它們。等等。這些通常比查找和替換黑客更安全,因爲如果不仔細應用,查找和替換通常會有不幸的副作用,如上所述。

這是可能的you may want使用regular expression。他們是not a universal solution to all problems,但對於一些工作非常方便。

如果您要無條件地將「&#47」的所有實例替換爲「/」,則不需要正則表達式。

如果您想更換「&#47」,而不是「&#471」,你可能需要一個正則表達式,因爲你可以做這樣的事情只匹配整個單詞,匹配各種圖案,指定最小/最大運行的數字等。

PostgreSQL string functions and operators文檔中,您會找到regexp_replace函數,該函數允許您在UPDATE語句中應用正則表達式。

爲了能說更多,我需要知道你的真實數據是什麼以及你真正想要做什麼。

+3

非常喜歡'nooking a fire'鏈接! –

相關問題