我有兩個VIEW,我需要使用EXCEPT運算符進行比較。目的是識別兩張表的記錄是否不同。問題在於一列(例如fldIdentifierNo)可能包含外文字符集,當我使用EXCEPT運算符似乎不能正確地比較這fldIdentifierNo。EXCEPT運算符不能使用外部字符集?
這是我的查詢,我也試過轉換列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將不會刪除硬空間。
我使用的更換和改變硬空間是CHAR(160)(NBSP)爲CHAR(32)(空間)。 REPLACE(列,CHAR(160),CHAR(32)
這是我的問題的解決方法,但更好我會檢查爲什麼會出現在列這樣的字符
首先檢查列的值是否爲真查看SSMS中的查詢結果可能會引起誤解,請嘗試'CONVERT(varbinary(8000),N'ChD /ЧД59121278')'並比較兩個表的二進制結果。 –
@VladimirBaranov:看起來它們是不一樣的。正如T_G所說的那樣,我的柱子上有一個空間,我試着修剪空間,但仍然有一列保留了空間,你可能知道爲什麼它是這樣嗎? –
它真的是一個空間嗎?檢查二進制值,是否爲0x20?LTRIM,RTRIM只刪除空格,不刪除其他非打印像回車或製表符的字符。 –