替换数据库文本字段中出现的所有子字符串

时间:2012-06-12 01:34:17

标签: sql postgresql replace

我有一个大约有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 /

3 个答案:

答案 0 :(得分:16)

如果要用另一个字符串替换特定字符串或转换该字符串,可以在postgresql中使用“替换”函数。例如,要在“myfield”列中用“dog”替换所有出现的“cat”,你会这样做:

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

您可以根据需要添加WHERE子句或任何其他逻辑。

或者,如果您尝试转换HTML实体,ASCII字符或各种编码方案之间,postgre也具有此功能。 Postgresql String Functions

答案 1 :(得分:3)

@davesnitty给出的答案可行,但您需要仔细考虑您要替换的文本模式是否嵌入在您不想修改的较长模式中。否则你会找到某人的nooking a fire,这很奇怪。

如果可能,请使用合适的专用工具来解决您的问题。有URLEncoded文字?使用网址解码器。有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语句中应用正则表达式。

为了能够说得多,我需要知道你的真实数据是什么,以及你真正想要做什么。

答案 2 :(得分:0)

如果没有postgres,则可以将所有数据库导出到sql文件,用文本编辑器替换字符串,然后删除主机上的数据库,然后重新导入新数据库

PS:小心