我有一个名为tbl.Products
的表,其中有一个名为articlenumber
的列,其中包含s401
,s402
等数字。
我生成了一个包含新文章编号的列表,该列表将替换旧文章编号:
s401 I00010
s402 I00020
s403 I00030
s403 I00040
...
我有一个查询,我希望它可以解决,但不知何故它什么也没做。
(当然我已将其他值嵌套到查询中)
SELECT REPLACE('articlenumber','s401','I00010') FROM tbl.Products
如何在这样的列中获得用旧值替换旧值的查询?
答案 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')