Sql server 在NVARCHAR中查找特定的字节组合
我们发现我们有一堆带有错误字符的法语字符串。 我们知道字符的十六进制表示形式是0xFDFF。 在NVarchar字段包含此字符的表中,是否有一种简单的方法来选择行 谢谢 编辑: oops,(n)char(x)陷阱 编辑2:Sql server 在NVARCHAR中查找特定的字节组合,sql-server,sql-server-2005,tsql,Sql Server,Sql Server 2005,Tsql,我们发现我们有一堆带有错误字符的法语字符串。 我们知道字符的十六进制表示形式是0xFDFF。 在NVarchar字段包含此字符的表中,是否有一种简单的方法来选择行 谢谢 编辑: oops,(n)char(x)陷阱 编辑2: select * from sys.sysobjects where charindex(CONVERT(nvarchar(1), 0xFDFF), name) > 0 谢谢你的帮助,亚瑟,+1谢谢你。 最后,我创建了一个游标并检查了表中每一行的所有字符,以找到奇怪
select * from sys.sysobjects where charindex(CONVERT(nvarchar(1), 0xFDFF), name) > 0
谢谢你的帮助,亚瑟,+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
声明游标。。。
....
而@@FETCH\u STATUS=0
开始
声明@pos int
设置@Pos=0
虽然@Pos是一个老问题,但我仍然没有找到在nvarchar列中查找0xFDFF无效字符的准确解决方案。最后,这在大多数(如果不是所有)情况下都应该有效:
CHARINDEX('FDFF',CONVERT(varchar(max),(CAST(fname AS VARBINARY(max))),2)) > 0
不知怎么的,这不管用。可能是因为此字符不是普通字符。选择转换(nchar,0xFDFF)返回一个字符。有什么问题?没有结果?还是语法错误?没有结果,我知道至少有2行有此字符。当我选择convert(binary,FieldName,1)时我看到了它。这是一个错误,(n)char(x)pitfall现在我得到了表中的所有行。。。很奇怪。
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
CHARINDEX('FDFF',CONVERT(varchar(max),(CAST(fname AS VARBINARY(max))),2)) > 0