sql - 替换 SQL 中不可打印的 Unicode 字符
问题描述
我有一个正在使用的数据库,它捕获了一些不可打印的 unicode 字符(SS2 或 Single-Shift 2)。我在这里找到了几个函数,它们应该用空格替换坏字符,但它们似乎不起作用。这是我所拥有的不起作用的:
我正在使用 SQL Server 2017
CREATE FUNCTION [dbo].[strip_non_printable_characters] (@S nvarchar(max))
Returns nvarchar(max)
Begin
;with cte1(N) As (Select 1 From (Values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N(N)),
cte2(C) As (Select Top (32) Char(Row_Number() over (Order By (Select NULL))-1) From cte1 a,cte1 b)
Select @S = Replace(@S,C,' ')
From cte2
Return ltrim(rtrim(replace(replace(replace(@S,' ','†‡'),'‡†',''),'†‡',' ')))
End
和
CREATE FUNCTION [dbo].[strip_non_printable_characters] (@input_string nvarchar(max))
returns table with schemabinding as return (
select
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
replace(replace(@input_string collate Latin1_General_BIN,
char(1), ''),char(2), ''),char(3), ''),char(4), ''),char(5), ''),char(6), ''),char(7), ''),char(8), ''),char(9), ''),char(10), ''),
char(11), ''),char(12), ''),char(13), ''),char(14), ''),char(15), ''),char(16), ''),char(17), ''),char(18), ''),char(19), ''),char(20), ''),
char(21), ''),char(22), ''),char(23), ''),char(24), ''),char(25), ''),char(26), ''),char(27), ''),char(28), ''),char(29), ''),char(30), ''),
char(31), ''), char(0) , '')
as clean_string
);
go
运行这些函数中的任何一个时,字符串仍将显示 SS2 字符。如果我将它作为 aNVARCHAR
或 a返回,它只varchar
会将坏字符显示为 a ?
。我需要用空格替换那个坏字符。
有人可以告诉我我做错了什么吗?
谢谢!!!
更新
这个功能给了我我需要的东西。
CREATE FUNCTION [dbo].[strip_non_printable_characters] (@OldString as nVarChar(4000))
RETURNS varChar(2000) AS
BEGIN
DECLARE @Count integer, @NewString varChar(4000)
SET @Count =1
SET @NewString = ''
WHILE @Count <= Len(@OldString)
BEGIN
--If the character is not a regular ascii character it will be removed
IF UNICODE(SUBSTRING(@OldString,@Count,1)) < 127
BEGIN
SET @NewString = @NewString + SUBSTRING(@OldString,@Count,1)
END
SET @Count = @Count + 1
END
RETURN @NewString
END
解决方案
推荐阅读
- python - 将json列表转换为字符串
- kendo-ui - kendo Ui Grid,使用 ajax 和现有过滤器加载数据
- python - 能够使用 PIL 创建缩略图,但我的多处理代码无法创建 PIL 缩略图
- javascript - 将子组件连接到 store 与将父组件连接到 store 并传递 props
- django - 使用 django 的 PostgreSQL IP inet 比较
- dart - Flutter 驱动程序:测试 BottomNavigationBarItem
- jenkins - jenkinsfile 自动检测 gitlab 分支
- java - 如何克服 OauthClientContext 的当前线程的间歇性范围“会话”不活动?
- c# - 除了 Scut 和 Photon 之外,还有支持 C# 的游戏服务器框架或引擎吗?
- php - 输入字段有php数组但不记录第一个元素