在 SQL Server 中替换整个表中的字符

Posted

技术标签:

【中文标题】在 SQL Server 中替换整个表中的字符【英文标题】:Replace character in whole table in SQL Server 【发布时间】:2017-04-13 08:16:51 【问题描述】:

我想问一下如何替换整个表格中的 1 个字符?

我想替换 © 的字符并将其更改为 Š

我找到了:http://www.sqlteam.com/article/using-replace-in-an-update-statement

我阅读了很多工作人员,但我发现在整个表中仅替换一列字符的代码。我尝试将列的名称添加到行中,但这不起作用..

我有:

Column1  Column2 Column3 
 ©pple     ©og    ©ook 

我需要:

Column1  Column2 Column3 
 Špple     Šog    Šook 

感谢您的意见

【问题讨论】:

Column1, Column2, Column3 的数据类型是什么? 【参考方案1】:

您可以在UPDATE 语句中一次更新多个字段。

UPDATE dbo.authors
SET    city = replace(city, 'Salt', 'Olympic')
     , city2 = replace(city2, 'Salt', 'Olympic')
     , city3 = replace(city3, 'Salt', 'Olympic')
     , ...

【讨论】:

【参考方案2】:

如果Column1, Column2, Column3 属于NVARCHAR 类型,那么您必须在每个字符串字面量前加上N,例如:

UPDATE mytable
SET Column1 = REPLACE(Column1, N'©', N'Š'),
    Column2 = REPLACE(Column2, N'©', N'Š'),
    Column3 = REPLACE(Column3, N'©', N'Š')

Demo here

【讨论】:

【参考方案3】:
Update table 
set col1=replace(col1,'©','Š' ),col2=replace(col2,'©','Š' ),col3=replace 
(col3,'©','Š' )
...colN=replace(colN,'©','Š' )

【讨论】:

【参考方案4】:

虽然其他答案,但回答您的特定问题..使用下面的方法将使用更少的 Tlog 并且会更有效,特别是如果您的列非常大(Varchar(max),Nvarchar(max)

 update table
 set col1.WRITE('Š',0,1),
     col2.WRITE('Š',0,1)   and so on 

【讨论】:

有趣的方法。 TBH 我不知道这种WRITE 语法。但是,这将要求每列都具有此值,否则将覆盖另一个字符。也只会替换第一个字符,因此如果多个字符出现在随机位置,您可能最终需要做更多的工作才能让这个WRITE 工作。如果这是一次性更新,我不会遇到麻烦。不过,感谢这种替代方法。看来我仍然每天都在学习有关 SQL 的新东西。 @Jens,是的,它完全按照你说的做,但你也可以使用替换和子串的东西

以上是关于在 SQL Server 中替换整个表中的字符的主要内容,如果未能解决你的问题,请参考以下文章

如何在SQL Server 2012中动态替换表中的所有值?

sql 删除指定字符串

如何检查 SQL Server 2008 表中字符串列中的 id

如何替换sql server中的第n个字符

SQL表中字符串相互替换的优化方式

SQL Server:性能问题:WHERE 子句中的 OR 语句替换