我们发现我们有一堆法语字符串,字符不正确。 我们知道字符的十六进制表示是0xFDFF。 是否有一种简单的方法来选择表中的行,其中NVarchar字段包含此字符?
由于
答案 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