【问题标题】:Using Replace in an update command DB2在更新命令 DB2 中使用 Replace
【发布时间】:2014-03-22 19:57:36
【问题描述】:

我有一个快速要求,我需要更新我的数据库中损坏的数据。 我有几个文本列,其中文本包含 &nbsp,虽然我们已经在代码中解决了问题,但我仍然需要更正 db 中损坏的数据。

我觉得我可以的

UPDATE table_name 
   SET column_name=(
        SELECT REPLACE(colum_name, ' ', '') 
        FROM table_name 
        WHERE id=1234) 
 WHERE id=1234

但我必须为每一行单独执行此操作。是否有更简单的查询来检查特定列中的所有行并删除 &nbsp 标记?

感谢您的帮助。

【问题讨论】:

  • 这个选择会返回多行并且更新会失败。
  • 即使有相关的子查询? UPDATE table_name t1 SET t1.column_name=( SELECT REPLACE(t1.column_name, ' ', '') FROM table_name t1)
  • DB2 错误 811 UPDATE 语句的 SET 子句中的嵌入式 SELECT 语句或子选择的结果是一个多行的表,或者基本谓词的子查询的结果更多不止一个值

标签: sql replace db2


【解决方案1】:

我认为其他专家将真正只需要简单UPDATE 的解决方案过于复杂:

UPDATE table_name SET column_name = REPLACE(column_name, ' ', '') 
  WHERE column_name LIKE '% %'

【讨论】:

  • 同意,尽管我可能会在 WHERE 子句中进行搜索以确保它具有有问题的值。不是为了加快索引速度(这里需要全表扫描),只是为了减少实际更新的行数(以及可能产生的潜在问题的数量)。
【解决方案2】:

您可以使用存储过程或匿名块来实现

应该是这样的。

begin
 declare atend boolean default false;
 declare val char(32);
 declare newstring char(32);
 declare c cursor for
  select col from table;

 open c;
 fetch c into val;
 while (atend = false) do
  set newstring = replace(val, ' ', '');
  update table set col = newstring where current of c;
  fetch c into val;
 end while;
end@

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多