在 mySQL 中搜索和替换的 SQL
Posted
技术标签:
【中文标题】在 mySQL 中搜索和替换的 SQL【英文标题】:SQL to search and replace in mySQL 【发布时间】:2009-01-07 17:31:02 【问题描述】:正在修复因使用错误的数据库编码或类似原因导致的导入不良的数据库。
无论如何,回到我的问题,为了解决这个问题,我正在使用这种形式的查询:
更新
table_name
SET field_name = replace(field_name,'search_text','replace_text');
因此,如果我正在处理的表有多个列,我必须为每个列调用此查询。而且,由于不仅有一对东西要运行查找和替换,我还必须为每一对调用查询。
如你所想,我最终运行了几十个查询来修复一张表。
我想知道是否有一种方法可以在一个查询中组合多个查找和替换,比如,假设查找这组东西,如果找到,用另一组中的对应对替换东西。
或者,如果有一种方法可以对我上面显示的表单进行查询,以某种方式递归地运行表的每一列,而不管它们的名称或编号。
提前感谢您的支持, 标题
【问题讨论】:
【参考方案1】:让我们分别尝试解决这些问题:
如果您需要对其执行此操作的每个表中的每一列的替换集都相同(或者只有几种模式),请考虑创建一个用户定义的函数,该函数接受一个 varchar 并返回一个 varchar只需调用replace(replace(@input,'search1','replace1'),'search2','replace2')
嵌套适当。
要同时更新多个列,您应该能够执行UPDATE table_name SET field_name1 = replace(field_name1,...), field_name2 = replace(field_name2,...)
或类似的操作。
至于为每个表中的每个列运行类似的操作,我认为编写一些代码来获取列列表并生成要从中执行的查询是最简单的。
【讨论】:
【参考方案2】:我不知道在每一列上自动运行搜索和替换的方法,但是通过嵌套调用 @ 可以轻松解决单个 UPDATE
查询中的多对搜索和替换术语的问题987654322@:
UPDATE table_name SET field_name =
replace(
replace(
replace(
field_name,
'foo',
'bar'
),
'see',
'what',
),
'I',
'mean?'
)
【讨论】:
【参考方案3】:如果您在同一字段中有多个不同文本的替换,我建议您创建一个包含当前值以及您希望它们替换为什么的表。 (如果这是一次性交易,则可能是某种临时表;如果不是,则将其设为永久表。)然后加入该表并进行更新。
类似:
update t1
set field1 = t2.newvalue
from table1 t1
join mycros-s-referncetable t2 on t1.field1 = t2.oldvalue
抱歉没有注意到这是 mysql,代码是我在 SQL Server 中使用的代码,我的 SQL 语法可能不同但技术相似。
【讨论】:
【参考方案4】:我写了一个存储过程来做到这一点。我在每个数据库级别上使用它,尽管很容易将它抽象为跨服务器全局操作。
我只是粘贴这个内联,但似乎我太密集而无法弄清楚如何使用降价交易,所以代码在这里:
http://www.anovasolutions.com/content/mysql-search-and-replace-stored-procedure
【讨论】:
以上是关于在 mySQL 中搜索和替换的 SQL的主要内容,如果未能解决你的问题,请参考以下文章