如何在SQL Server 2005表的NTEXT字段中找到Unicode /非ASCII字符?

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)

  • @CC1960 我收到错误“数据类型 ntext 和 nvarchar(max) 在不等于运算符中不兼容。”有想法吗?- 使用 SQL Server 2005 (3认同)
  • 如果排序规则设置为“非 ASCII”排序规则,则它不起作用。 (2认同)

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对另一个答案的评论.


pet*_*amd 7

给你:

SELECT *
FROM Objects
WHERE 
    ObjectKey LIKE '%[^0-9a-zA-Z !"#$%&''()*+,\-./:;<=>?@\[\^_`{|}~\]\\]%' ESCAPE '\'
Run Code Online (Sandbox Code Playgroud)