2012-06-12 141 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'链接! –

相关问题