替换数据库文本字段中所有出现的子字符串
Posted
技术标签:
【中文标题】替换数据库文本字段中所有出现的子字符串【英文标题】:Replace all occurrences of a substring in a database text field 【发布时间】:2012-06-14 21:58:43 【问题描述】:我有一个包含大约 10k 条记录的数据库,其中一些包含我想替换的 html 字符。
例如我可以找到所有的匹配项:
SELECT * FROM TABLE
WHERE TEXTFIELD LIKE '%/%'
原始字符串示例:
this is the cool mega string that contains &#47
如何将所有&#47
替换为/
?
最终结果应该是:
this is the cool mega string that contains /
【问题讨论】:
使用更新语句。如果您已经有一个工作选择,那么它的 TSQL 101 来编写更新。 @MitchWheat TSQL?这是一个 PostgreSQL 数据库。 SQL:我想你知道我的意思了。 postgresql - replace all instances of a string within text field的可能重复 您会在这里找到最佳答案:***.com/a/836090/4846859 【参考方案1】:如果您想用另一个字符串替换特定字符串或对该字符串进行转换,您可以使用 postgresql 中的“替换”函数。例如,要将“myfield”列中所有出现的“cat”替换为“dog”,您可以:
UPDATE tablename
SET myfield = replace(myfield,"cat", "dog")
您可以添加 WHERE 子句或您认为合适的任何其他逻辑。
另外,如果您尝试转换 HTML 实体、ASCII 字符或在各种编码方案之间转换,postgre 也有相应的功能。 Postgresql String Functions.
【讨论】:
【参考方案2】:@davesnitty 给出的答案会起作用,但您需要非常仔细地考虑您要替换的文本模式是否会嵌入到您不想修改的较长模式中。否则你会找到某人的nooking a fire,这很奇怪。
如果可能,请使用合适的专用工具来处理您未转义的内容。有 URLEncoded 文本?使用 url 解码器。有 XML 实体吗?通过文本模式输出中的 XSLT 样式表处理它们。等等。对于您的数据而言,这些通常比使用查找和替换来破解数据更安全,因为如果不小心应用,查找和替换通常会产生不幸的副作用,如上所述。
you may want 可以使用regular expression。他们是not a universal solution to all problems,但对于某些工作来说真的很方便。
如果您想用“/”无条件地替换所有“/”实例,则不需要正则表达式。
如果你想替换“/”而不是“Ǘ”,你可能需要一个正则表达式,因为你可以做一些事情,比如只匹配整个单词,匹配各种模式,指定最小/最大数字运行,等等
在PostgreSQL string functions and operators 文档中,您会找到regexp_replace
函数,它可以让您在UPDATE
语句中应用正则表达式。
为了能够说更多,我需要知道你的真实数据是什么以及你真正想要做什么。
【讨论】:
喜欢'nooking a fire'链接!!【参考方案3】:如果您没有 postgres,您可以将所有数据库导出到一个 sql 文件,用文本编辑器替换您的字符串并删除您主机上的数据库,然后重新导入您的新数据库
PS:小心
【讨论】:
以上是关于替换数据库文本字段中所有出现的子字符串的主要内容,如果未能解决你的问题,请参考以下文章