(T)SQL Query过滤所有包含�的数据集

时间:2014-01-23 12:48:25

标签: sql sql-server tsql unicode encoding

我刚收到一个(MSSQL)数据库,遗憾的是数据已损坏。 在一些数据集中,德语特殊字符(ä/ü/ö)被替换为 符号(Unicode:\ uFFFD)。

这不是整理或使用各种编码或任何东西(我已经检查过)的问题,而是提供原始数据的人的错误,因为我很确定这些符号是“硬编码”的数据意味着它们“总是”存在,并且可能是由数据提供者的失败迁移(或类似的东西)而存在的。

由于在没有这些错误的情况下无法正确转储,我目前正在寻找仅选择受影响的数据集的可能性。我已经尝试了一个[...] WHERE LIKE'%\ uFFFD%'语句(希望DB在内部将这些符号解码为unicode代码),但无济于事。 [...] WHERE LIKE'% %'部分工作,因为它显示所有受影响的列,但也显示包含法线的所有数据集?字符(这使得这个方法对我来说不可用,因为输出太大了。)

有没有人知道是否有可能专门选择包含 的数据集?

祝你好运, daZza

1 个答案:

答案 0 :(得分:1)

结果取决于您的整理设置。我能够让它与几个不同的工作。我认为最通用的是:

SELECT  *
FROM    (VALUES (N'A�A'), (N'A?A'), (N'AAA'), (N'�A'), (N'A�'), (N'�')) t (c)
WHERE   CHARINDEX(N'�' COLLATE Latin1_General_BIN, C) > 0;

或者

SELECT  *
FROM    (VALUES (N'A�A'), (N'A?A'), (N'AAA'), (N'�A'), (N'A�'), (N'�')) t (c)
WHERE   C LIKE N'%�%' COLLATE Latin1_General_BIN;

使用LIKE时,它似乎只适用于使用二进制排序的排序规则(尽管我没有尝试过所有排序规则!)。您可以使用以下方式获取这些:

SELECT name, description
FROM fn_helpcollations()