我有一个包含我想摆脱的特殊字符的表。
示例:
这是文本(我粘贴了图片,因为文字版本中没有显示该字符)
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
时,我会得到结果。
那么我做错了什么?谢谢你的帮助。
答案 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