sql - 用纯文本替换 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 以进行导出。
解决方案
您可能想尝试以下(以避免语法错误):
对于 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
推荐阅读
- android - 使用 Android 密钥库时出现 KeyNotYetValidException
- javascript - 获取基于时间戳获取谷歌图表的问题
- docker - 如果机器上没有安装的 Volumes 文件夹,Docker stack deploy 不会运行容器
- python - 与未知数量的参数相交的 Pythonic 方式
- java - Lombok 1.18.2 不适用于 maven 和 jdk 10
- java - 在查询、jpa 存储库和 Spring Boot 中使用非硬编码值
- android - 我应该选择哪个 Recyclerview 或 ScrollView?
- google-api - Google 管理帐户:API 访问所需的权限
- debugging - 设置短名称时连接到生产节点
- ios - 具有相同 bundleID 的应用程序将具有相同的沙盒?