在表格中查找特殊字符并将其删除

时间:2017-04-10 12:19:56

标签: sql sql-server tsql

我有一个包含我想摆脱的特殊字符的表。

示例:

enter image description here

这是文本(我粘贴了图片,因为文字版本中没有显示该字符)

enominazione AOC. I vini di b

我使用ASCII()函数获得了此字符的ASCII码,并返回11

问题在于我执行此查询时:

DECLARE @specharfilter NVARCHAR(10) = CHAR(11);
SELECT * FROM My_Table WHERE [Text] like N'%' + @specharfilter + N'%' 

我没有得到任何结果。另一方面,当我尝试使用另一个ascii代码,如70时,我会得到结果。

那么我做错了什么?谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

您可以使用PATINDEX()

SELECT * FROM My_Table 
WHERE PATINDEX('%[^0-9][^a-z][^A-Z]%',Col1) > 0

答案 1 :(得分:0)

如果对UDF感兴趣,以下函数将从字符串中删除控制字符而不是单词。

示例:

Select [dbo].[udf-Str-Strip-Control]('Michael        '+char(13)+char(10)+'LastName') 

<强>返回

Michael LastName   -- << No CRLF or extra spaces and 

感兴趣的UDF

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),(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