SQL用新的值替换旧值

时间:2009-10-27 07:22:42

标签: sql replace

我有一个名为tbl.Products的表,其中有一个名为articlenumber的列,其中包含s401s402等数字。

我生成了一个包含新文章编号的列表,该列表将替换旧文章编号:

s401  I00010  
s402  I00020  
s403  I00030  
s403  I00040  
...  

我有一个查询,我希望它可以解决,但不知何故它什么也没做。

(当然我已将其他值嵌套到查询中)

SELECT REPLACE('articlenumber','s401','I00010') FROM tbl.Products

如何在这样的列中获得用旧值替换旧值的查询?

2 个答案:

答案 0 :(得分:11)

进行替换可能有问题(如果你有文章s401和s4010怎么办?),因此这样做会更加健壮:

Update tblProducts
SET articlenumber = 'I000010'
Where articlenumber = 's401';

如果您要进行多项更改,可以生成一个小脚本(例如使用Excel,如TheButcher建议的那样),或者您可以将数据导入到包含oldVal和newVal列的小表tblVals中,然后使用此声明:

Update tblProducts p
SET articlenumber = (Select newVal
    From tblVals
    where oldVal = p.articlenumber);

这允许你在一个语句中进行更新,这个语句比运行一个脚本更强大,如果它真的很长,可能会遇到问题。

第三个想法是在SQL(或存储过程)中构建旧数字的新数字(如果存在这样的东西)中的逻辑,如下所示:

Update tblProducts p
SET articlenumber = 'I0000' || Right(articlenumber,1) || '0'

(当然这完全简化了,对于你的30k行可能还不够。)

答案 1 :(得分:8)

您只是选择新替换的值并且没有对它们做任何事情...这是一个非常好的主意,当使用替换时,总是先选择双重检查您将获得预期的结果:)

更新代码 -

Update  tbl.Products
Set articlenumber = replace(articlenumber, 's401', 'I00010')