数据库中的文本字段替换字符串的所有出现(Replace all occurrences of a s

2019-07-29 20:34发布

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

Answer 1:

如果要替换该字符串的另一个字符串或转型的特定字符串,你可以在PostgreSQL中使用“替换”功能。 举例来说,以取代“猫”与列“MyField的”“狗”的所有出现,你会怎么做:

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

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

另外,如果你正试图转换HTML实体,ASCII字符,或各种编码方式的,postgre具有该功能为好。 PostgreSQL的字符串函数 。



Answer 2:

通过@davesnitty给出的答案会的工作,但你必须非常小心你要替换的文本模式是否可能出现嵌在你不希望修改一个较长的模式思考。 否则,你会发现有人在nooking火 ,而这只是奇怪。

如果可能的话,使用你在做什么取消转义合适的专用工具。 得到了urlencoded的文本? 使用URL解码器。 有XML实体? 处理它们虽然在文本模式输出的XSLT样式表。 等,这些通常是你的数据比查找和替换盗号的安全,在查找和替换往往有不幸的副作用,如果不小心应用,如上所述。

这是可能的,你可能需要使用正则表达式 。 他们是不是一个普遍的解决所有问题 ,但对于一些工作非常方便。

如果您想无条件地“/”代替“&#47”的所有实例,你并不需要一个正则表达式。

如果您想更换“&#47”,而不是“&#471”,你可能需要一个正则表达式,因为你可以做这样的事情只匹配整个单词,匹配各种图案,指定最小/最大运行的数字,等等。

在PostgreSQL的字符串函数和操作文档,你会发现regexp_replace功能,可以让你在过程中应用正则表达式UPDATE语句。

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



Answer 3:

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

PS:小心



文章来源: Replace all occurrences of a substring in a database text field