8

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

4

3 回答 3

22

如果您想用另一个字符串或该字符串的转换替换特定字符串,您可以使用 postgresql 中的“替换”函数。例如,要将“myfield”列中所有出现的“cat”替换为“dog”,您可以:

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

您可以添加 WHERE 子句或您认为合适的任何其他逻辑。

或者,如果您尝试转换 HTML 实体、ASCII 字符或在各种编码方案之间转换,postgre 也有相应的功能。 Postgresql 字符串函数

于 2012-06-12T02:07:14.667 回答
4

@davesnitty 给出的答案会起作用,但是您需要非常仔细地考虑您要替换的文本模式是否会嵌入到您不想修改的较长模式中。否则你会发现有人在生火,这很奇怪。

如果可能,请使用合适的专用工具来处理您要逃避的事情。有 URLEncoded 文本?使用 url 解码器。有 XML 实体吗?通过文本模式输出中的 XSLT 样式表处理它们。等等。对于您的数据而言,这些通常比使用查找和替换来破解它更安全,因为如果不小心应用,查找和替换通常会产生不幸的副作用,如上所述。

您可能想要使用正则表达式。它们不是所有问题的通用解决方案,但对于某些工作来说确实很方便。

如果您想无条件地用“/”替换所有“/”实例,则不需要正则表达式。

如果您想替换“/”而不是“Ǘ”,则可能需要一个正则表达式,因为您可以执行诸如仅匹配整个单词、匹配各种模式、指定最小/最大数字运行等操作。

PostgreSQL 字符串函数和运算符文档中,您会找到该regexp_replace函数,它可以让您在语句期间应用正则表达式UPDATE

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

于 2012-06-12T05:48:45.313 回答
0

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

PS:小心

于 2018-07-25T12:34:48.240 回答