The*_*edi 34 sql sql-server sql-server-2005
我有一个有几千行的表.描述和摘要字段是NTEXT,有时其中包含非ASCII字符.如何找到所有非ASCII字符的行?
小智 52
我有时一直在使用这个"演员"声明找到"奇怪的"字符
select
*
from
<Table>
where
<Field> != cast(<Field> as varchar(1000))
Run Code Online (Sandbox Code Playgroud)
And*_*mar 17
首先构建一个包含您不感兴趣的所有字符的字符串(该示例使用0x20 - 0x7F范围,或7位不带控制字符.)每个字符都以|为前缀,以便稍后在escape子句中使用.
-- Start with tab, line feed, carriage return
declare @str varchar(1024)
set @str = '|' + char(9) + '|' + char(10) + '|' + char(13)
-- Add all normal ASCII characters (32 -> 127)
declare @i int
set @i = 32
while @i <= 127
begin
-- Uses | to escape, could be any character
set @str = @str + '|' + char(@i)
set @i = @i + 1
end
Run Code Online (Sandbox Code Playgroud)
下一个代码段会搜索列表中没有的任何字符.%匹配0个或更多字符.[]匹配[]中的一个字符,例如[abc]将匹配a,b或c.^否定列表,例如[^ abc]将匹配不是a,b或c的任何内容.
select *
from yourtable
where yourfield like '%[^' + @str + ']%' escape '|'
Run Code Online (Sandbox Code Playgroud)
转义字符是必需的,因为否则搜索像,]或_等字符会弄乱LIKE表达式.
希望这很有用,感谢JohnFX对另一个答案的评论.
给你:
SELECT *
FROM Objects
WHERE
ObjectKey LIKE '%[^0-9a-zA-Z !"#$%&''()*+,\-./:;<=>?@\[\^_`{|}~\]\\]%' ESCAPE '\'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61118 次 |
| 最近记录: |