如何在不使用光标的情况下替换列中的不同字符?

时间:2012-12-13 15:00:16

标签: sql-server-2008 tsql

Sample items in table1 

table1.productname 
Moshi Monsters 7-in-1 Accessory Pack - Poppet 
Mario vs. Donkey Kong Mini-Land Mayhem! 

我想replace' - 。 !来自所有productname,但使用

select case
        when CHARINDEX ('-',[productname])>0 then REPLACE (ProductName ,'-',' ')
        when CHARINDEX ('!',[productname])>0 then REPLACE (ProductName ,'!','') 
        when CHARINDEX ('.',[productname])>0 then REPLACE (ProductName ,'.','') 
       else productname
       end as productname 
   from table1

似乎只替换-

output

Moshi Monsters 7 in 1 Accessory Pack   Poppet 
Mario vs. Donkey Kong Mini-Land Mayhem 

expected output 
Moshi Monsters 7 in 1 Accessory Pack   Poppet 
Mario vs Donkey Kong MiniLand Mayhem

我该如何解决这个问题,我在productname中有多个字符要替换,例如在例子和更多中,列大约是5k。 实际上我想用更改的名称更新table1,但是想要在更新之前查看哪些已更改以及如何更改。这种replace语句似乎没有满足所有要求。 似乎可以在更新中进行多次迭代,但不知道如何在更新中使用迭代。我该如何处理?

1 个答案:

答案 0 :(得分:3)

您始终使用SAME源替换字符串:原始ProductName字段,不会更改。你需要链接替换:

REPLACE(REPLACE(REPLACE(ProductName, '.', ''), '!', ''), '-', '')

非常快速地变得丑陋。你最好在你的客户端做这件事。