在NVARCHAR中查找特定的字节组合

时间:2009-09-28 10:12:48

标签: sql-server sql-server-2005 tsql

我们发现我们有一堆法语字符串,字符不正确。 我们知道字符的十六进制表示是0xFDFF。 是否有一种简单的方法来选择表中的行,其中NVarchar字段包含此字符?

由于

3 个答案:

答案 0 :(得分:2)

WRONG: select * from YourTable where YourCol like '%' + CONVERT(nchar, 0xFDFF) + '%'

编辑: oops,(n)char(x)陷阱

right: select * from sys.sysobjects where name like '%' + CONVERT(nchar(1), 0x4800) + '%'

EDIT2:

select * from sys.sysobjects where charindex(CONVERT(nvarchar(1), 0xFDFF), name) > 0 

答案 1 :(得分:0)

感谢Arthur的所有帮助,给你+1 我最终创建了一个游标,并检查表的每一行中的所有字符,以找到奇怪的0xFDFF字符。我将所有id连接成一个变量并从那里得到我的列表。

DECLARE CURSOR ...
....
WHILE @@FETCH_STATUS = 0   
BEGIN   

        Declare @pos int
        set @Pos = 0

        while @Pos <= Len(@Str)
        begin
            if(convert(binary(2), substring(@Str, @pos, 1), 0) = 0xFDFF)
            begin
                set @ids = @ids + ',' + cast(@TheId as varchar)
                --Select @TheId, @Str
                break
            end
            set @Pos = @Pos + 1
        end

       FETCH NEXT FROM db_cursor INTO @TheId, @Str   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor

select @ids

答案 2 :(得分:0)

旧问题,但我仍未找到在nvarchar列中查找0xFDFF无效字符的准确解决方案。最后,这应该适用于大多数(如果不是全部)情况:

CHARINDEX('FDFF',CONVERT(varchar(max),(CAST(fname AS VARBINARY(max))),2)) > 0