我有两个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'
我比较的数据是这样的:
这是编辑的实际结果:
解决 在@T_G和@VladimirBalanov的帮助下,我通过发现其中一个列上有“硬空间”来解决它。使用LTRIM和RTRIM不会删除硬区。
我使用了REPLACE并将CHAR(160)(nbsp)的硬空间更改为CHAR(32)(空格)。 REPLACE(列名,CHAR(160),CHAR(32)
这是我的问题的解决方法,但更好我会检查为什么列上有这样的字符。
答案 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)
这是我的问题的解决方法,但更好我将检查为什么列上有这样的字符。