Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何在不使用光标的情况下替换列中的不同字符?_Sql Server 2008_Tsql - Fatal编程技术网

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

Sql server 2008 如何在不使用光标的情况下替换列中的不同字符?,sql-server-2008,tsql,Sql Server 2008,Tsql,我想更换“-。!”从所有productname,但使用 Sample items in table1 table1.productname Moshi Monsters 7-in-1 Accessory Pack - Poppet Mario vs. Donkey Kong Mini-Land Mayhem! 似乎只替换了- select case when CHARINDEX ('-',[productname])>0 then REPLACE (Produc

我想更换“-。!”从所有
productname
,但使用

Sample items in table1 

table1.productname 
Moshi Monsters 7-in-1 Accessory Pack - Poppet 
Mario vs. Donkey Kong Mini-Land Mayhem! 
似乎只替换了
-

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
我应该如何解决这个问题,我在productname中有多个字符需要替换,例如示例中的字符和更多字符,而该列大约有5k大。 实际上,我想用更改后的名称更新table1,但想在更新之前查看哪些更改以及如何更改。这种
replace
语句似乎不能满足所有要求。
似乎可以通过更新中的多次迭代来完成,但不知道如何在更新中使用迭代。我应该如何处理呢?

您总是使用相同的源来替换字符串:原始的
ProductName
字段,该字段不会更改。您需要链接替换项:

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
字段,该字段不会更改。您需要链接替换项:

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

很快就会变得丑陋不堪。您最好在您的客户机中这样做。

CASE语句只执行其WHEN/ELSE子句中的一个,即它发现的第一个适用的子句。在您的示例中,因为产品名称中有一个“-”字符,所以CASE执行特定的WHEN子句,然后停止。如果没有'-',则只会检查'!',而且只有在没有'的情况下它会检查“.”吗?Hellion谢谢,所以如果我从语句中删除
CASE
,那一定很好,对吗?我现在就试试看。正如Marc B所说,CASE语句只执行其WHEN/ELSE子句中的一个,即它发现的第一个适用的子句。在您的示例中,因为产品名称中有一个“-”字符,所以CASE执行特定的WHEN子句,然后停止。如果没有'-',则只会检查'!',而且只有在没有'的情况下它会检查“.”吗?Hellion谢谢,所以如果我从语句中删除
CASE
,那一定很好,对吗?我现在就试试看。就像Marc B所说的那样。谢谢,虽然看起来很难看,但它又快又容易,这是我一直在寻找的。谢谢,虽然看起来很难看,但它又快又容易,这是我一直在寻找的。