Sql-Server

批量更新以替換 SQL Studio 管理中的特殊字元

  • September 12, 2021

我正在嘗試刪除/更正我的數據庫中的一些特殊字元,這些字元在導出時會表現出奇怪的行為。

具體&和撇號

我執行了一個查詢來查找包含特殊字元的值,雖然查詢成功找到了它們,但我仍然無法用第二個查詢 UPDATE 替換/刪除它們(沒有任何反應):

SELECT 
[Loc1],[IND_KEY]
FROM [Database].[dbo].[List]
WHERE CONVERT(VARCHAR(MAX), Loc1)LIKE'%[&]%';

UPDATE [Database].[dbo].[List]
SET  Loc1 = REPLACE(CAST(Loc1 as nVarchar(4000)), '[&]','and')
WHERE Loc1 LIKE '%[&]%';

我正在使用 Microsoft SQL Server Management Studio。


如果我想用單引號替換撇號怎麼辦(最後一個在導出時不會引起問題)。例如

UPDATE [Database].[dbo].[List] 
SET Loc1 = REPLACE(CAST(Loc1 as NVARCHAR(4000)), CHAR(39), '''')
WHERE Loc1 LIKE'Lake'''s%';

它似乎不起作用,是否需要以某種方式引用單引號?

不要將 REPLACE 函式中的文字括在方括號中。LIKE由於您正在尋找單個字元,因此子句中也不需要這些附件。

嘗試:

UPDATE [Database].[dbo].[List] 
SET Loc1 = REPLACE(CAST(Loc1 as nvarchar(4000)), N'&', N'and') 
WHERE Loc1 LIKE N'%&%';`

另外,我認為這裡不需要CAST

UPDATE [Database].[dbo].[List] 
SET Loc1 = REPLACE(Loc1, N'&', N'and') 
WHERE Loc1 LIKE N'%&%';

您應該能夠引用要替換為字元程式碼的單個字元,以確保您引用的是確切的字元。NCHAR()您可以使用函式來做到這一點。

以下是您的REPLACE()函式變成的範例:REPLACE(CAST(Loc1 as NVARCHAR(4000)), NCHAR(38), N'and')

& 符號的十進制程式碼是 38,撇號可以使用 39。

引用自:https://dba.stackexchange.com/questions/297521