加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – SQL Server – 删除所有不可打印的ASCII字符

发布时间:2020-12-12 08:56:31 所属栏目:MsSql教程 来源:网络整理
导读:我们最近从SQL Server 2012迁移到SQL Server 2014,并且我们所有的FOR XML代码都开始抛出有关不可打印的ASCII字符的错误. 我写了这个可怕的函数来删除不可打印的ASCII字符作为快速修复.我想用更干净的东西代替它.有没有办法做到这一点? ALTER FUNCTION [dbo].
我们最近从SQL Server 2012迁移到SQL Server 2014,并且我们所有的FOR XML代码都开始抛出有关不可打印的ASCII字符的错误.
我写了这个可怕的函数来删除不可打印的ASCII字符作为快速修复.我想用更干净的东西代替它.有没有办法做到这一点?
ALTER FUNCTION [dbo].[remove_non_printable_chars]
(@input_string nvarchar(max))
RETURNS nvarchar(max)
BEGIN
    RETURN
    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,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),NCHAR(0) COLLATE Latin1_General_100_BIN2,'')
END

这是打破的FOR XML代码. (我没有写这个.它已经在代码库中了).

SELECT @HTMLTableData =
(
    SELECT  HTMLRows 
    FROM (
        SELECT N'<tr>' + HTMLRow + N'</tr>' AS HTMLRows 
        FROM @HTMLRowData
    ) mi            
    FOR XML PATH(''),TYPE
).value('/','NVARCHAR(MAX)')

解决方法

另外一个选项.

此功能将替换控制字符并更正任何残留的重复空格.例如,简·史密斯{13}在这里将不会像简史密斯在这里那样被归还,而是珍·史密斯在这里

CREATE FUNCTION [dbo].[udf-Str-Strip-Control](@S varchar(max))
Returns varchar(max)
Begin
    ;with  cte1(N) As (Select 1 From (Values(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
--Select [dbo].[udf-Str-Strip-Control]('Michael        '+char(13)+char(10)+'LastName')  --Returns: Michael LastName

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读