首页 > 解决方案 > 用纯文本替换 unicode 字符的 SQL 命令

问题描述

要将我们的数据库导出到 excel(导入到另一个产品),我需要删除 Unicode 字符。但是,我知道足够多的 SQL 来执行此操作,从而找到了很多产品。

SELECT * FROM Products_TEST_Products WHERE CustomMemo01 LIKE '%*%'

我试过了:

SELECT * REPLACE('*', '*', ' ') FROM Products_TEST_Products WHERE CustomMemo01 LIKE '%*%'

它似乎没有做任何事情。我希望它会用空格删除星号。我只是想*用空格代替。当我在没有的情况下尝试上述代码时,LIKE '%*%'出现以下错误:

“在 ConnOpenRecordset() 中打开记录集时出错:陷入错误 (-2147217900) 'REPLACE' adoConnState=1 SQL= 附近的语法错误

我的代码紧随其后SQL=

我最终试图用纯文本删除所有 Unicode 以进行导出。

标签: sqlsql-serverunicodereplace

解决方案


您可能想尝试以下(以避免语法错误):

对于 unicode:在文本值N'之前添加unicode它以识别它unicode

SELECT *, REPLACE(CustomMemo01, N'*', ' ') 
FROM   Products_TEST_Products 
--WHERE CustomMemo01 LIKE '%*%'

如果您只想替换所有UNICODE值并且这些值是随机的,您可以按照以下列:

replace (cast(CustomMemo01 as varchar(50)), '?', '') as NonUnicodeColumn

此脚本可能会帮助您开始:

Use YourDatabase
go 

Create Table UnicodeTbl
(UnioCodevalue nvarchar(50),
 EngValue varchar(50) 
)
go


  Insert into UnicodeTbl 
 (EngValue, UnioCodevalue)
 values
 ('Some Text 1', N'Text Arabic: بعض النصوص' ),
 ('Some Text 2', N'Text Chinese: 一些文字' ),
 ('Some Text 3', N'Text Hindi: कुछ पाठ' ),
 ('Some Text 4', N'Text Japanese: テキスト' ),
 ('Some Text 5', N'Text Russian: Некоторый текст' )
 go

--- Conversion test ----------------------------------------------------------
--select    replace ( (cast(UnioCodevalue as varchar(50)) ), '?', '') as ReplacedUnicode,
--      *
--from UnicodeTbl
--go


-- Enables xp_cmdshell to execute DOS commands from T-SQL ------------------------------------------------------------
IF (select value_in_use from sys.configurations 
    where name = 'xp_cmdshell' 
    ) = 0
    BEGIN
        exec sp_configure 'show advanced option', 1;
        reconfigure;

        exec SP_Configure 'xp_cmdshell', 1;
        Reconfigure ;
    END
go


-- Exports to CSV from a view ----------------------------------------------------------------------------------------
Create view vw_Unocode as
select 'ReplacedUnicode' c1Header, 'EngValue' as c2Header
union  
select  replace ( (cast(UnioCodevalue as varchar(50)) ), '?', '') as ReplacedUnicode,
        EngValue
from UnicodeTbl
go

exec master.dbo.xp_cmdshell 'mkdir C:\BCPTest'; --- Creates folder, you may change your own directory

exec master.dbo.xp_cmdshell 
'bcp "YourDatabase.dbo.vw_Unocode" out "C:\BCPTest\UnicodeView.csv" -S ".\SQLExpress" -T -c -t,'; 
go


--Drop Table UnicodeTbl
--Drop View vw_Unocode

exec SP_Configure 'xp_cmdshell', 0;
Reconfigure ;
go

exec sp_configure 'show advanced option', 0;
reconfigure;
go

推荐阅读