2011-11-23 28 views
4

爲什麼當where子句中的目標列是char(20)時,以下內容會返回結果?SQL char到varchar的比較工作,爲什麼?

declare @pallettag varchar(20) 
set @pallettag = '168531' 
--set @pallettag = @pallettag + SPACE(20 - Len(@pallettag)) 

select s.ROWID, s.SUBLOTCODE + '*', @pallettag + '*' 
from IMSUBLOT as s 
where s.SUBLOTCODE = @pallettag 

s.SUBLOTCODE被定義爲char(20)我希望只有我去掉,我添加所需的空間的第三行獲得的結果。

回答

4

末尾的空格ignored in string comparisons in SQL Server除了上在LIKE比較正確的表達式。

SELECT CASE 
     WHEN '168531' = '168531    ' THEN 'Y' 
     ELSE 'N' 
     END AS [=], 
     CASE 
     WHEN '168531' LIKE '168531    ' THEN 'Y' 
     ELSE 'N' 
     END AS [Like RHS], 
     CASE 
     WHEN '168531    ' LIKE '168531' THEN 'Y' 
     ELSE 'N' 
     END AS [Like LHS]  

返回

= Like RHS Like LHS 
---- -------- -------- 
Y N  Y 
+0

這裏是我發現的完整解釋http://support.microsoft.com/kb/316626 –

0

VARCHAR(20)指的字符到任何長度和包括20

+1

是的,但OP是假設在CHAR(20)的值將與空格填充 - 這是一個需要解決的問題的一部分。 :) –

相關問題