我有一个名为表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行).
你只是选择新替换的值,而不是用它们做任何事情......这是一个非常好的主意,当使用替换时,总是先选择双重检查你将得到预期的结果:)
更新代码 -
Update tbl.Products
Set articlenumber = replace(articlenumber, 's401', 'I00010')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44080 次 |
| 最近记录: |