EXCEPT运算符不使用外来字符集?

时间:2015-01-13 01:13:47

标签: sql-server sql-server-2008

我有两个VIEW需要使用EXCEPT运算符进行比较。目的是确定两个表的记录是否不同。问题在于一列(例如 fldIdentifierNo )可能包含外来字符集,当我使用EXCEPT运算符时,它似乎无法正确比较 fldIdentifierNo

这是我的查询,我也尝试将列明确转换为NVARCHAR(MAX)以确保无效,但始终返回记录有差异。

SELECT 
    fldIdentifierNo  -- tried it also this way CONVERT(NVARCHAR(MAX),fldIdentifierNo)
FROM 
     this_is_the_view_local
WHERE 
    staff_no='00001'
EXCEPT
SELECT 
    fldIdentifierNo  -- tried it also this way CONVERT(NVARCHAR(MAX),fldIdentifierNo)
FROM 
    this_is_the_other_view
WHERE 
    staff_no='00001'                        

我比较的数据是这样的:

EXCEPT result

这是编辑的实际结果:

Actual result from editor

解决 在@T_G和@VladimirBalanov的帮助下,我通过发现其中一个列上有“硬空间”来解决它。使用LTRIM和RTRIM不会删除硬区。

我使用了REPLACE并将CHAR(160)(nbsp)的硬空间更改为CHAR(32)(空格)。 REPLACE(列名,CHAR(160),CHAR(32)

这是我的问题的解决方法,但更好我会检查为什么列上有这样的字符。

2 个答案:

答案 0 :(得分:0)

请尝试:

SELECT 
    LTRIM (RTRIM (fldIdentifierNo)) COLLATE database_default
FROM 
     this_is_the_view_local
WHERE 
    staff_no='00001'
EXCEPT
SELECT 
    LTRIM (RTRIM (fldIdentifierNo))  COLLATE database_default
FROM 
    this_is_the_other_view
WHERE 
    staff_no='00001' 

答案 1 :(得分:0)

在@T_G和@VladimirBalanov的帮助下,我通过发现其中一个列上有“硬空间”来解决它。使用LTRIM和RTRIM不会删除硬区。

我使用了REPLACE并将CHAR(160)(nbsp)的硬空间更改为CHAR(32)(空格)。 REPLACE(列名,CHAR(160),CHAR(32)

这是我的问题的解决方法,但更好我将检查为什么列上有这样的字符。