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