SQL用新的值替换旧值

elh*_*bre 4 sql replace

我有一个名为表tbl.Products,其中有一个名为列articlenumber,并充满了相同的数字的s401,s402等等.

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

s401  I00010  
s402  I00020  
s403  I00030  
s403  I00040  
...  
Run Code Online (Sandbox Code Playgroud)

我有一个查询,我希望它可以解决,但不知怎的,它什么也没做.

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

SELECT REPLACE('articlenumber','s401','I00010') FROM tbl.Products
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*ten 12

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

Update tblProducts
SET articlenumber = 'I000010'
Where articlenumber = 's401';
Run Code Online (Sandbox Code Playgroud)

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

Update tblProducts p
SET articlenumber = (Select newVal
    From tblVals
    where oldVal = p.articlenumber);
Run Code Online (Sandbox Code Playgroud)

这允许您在一个语句中执行更新,这比再运行一个脚本更强大,如果脚本很长,可能会遇到问题.

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

Update tblProducts p
SET articlenumber = 'I0000' || Right(articlenumber,1) || '0'
Run Code Online (Sandbox Code Playgroud)

(当然这是完全简化的,可能不足以满足你的30k行).


The*_*her 8

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

更新代码 -

Update  tbl.Products
Set articlenumber = replace(articlenumber, 's401', 'I00010') 
Run Code Online (Sandbox Code Playgroud)

  • 我认为最好的方法是在excel中做到这一点.在A列中使用旧值,在B列中使用新值.然后在C列中使用占位符为值创建查询 - 更新tbl.Products设置articlenumber = replace(articlenumber,'&A1&','&B1'); 然后只需将单元格右下角的小黑色工具提示一直拖到电子表格和中提琴的底部,它就会生成所有脚本.希望能帮助到你 (2认同)