2011-11-23 3 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은 문자 (20)로서 정의되며, I는 I는 I가 필요한 공간을 첨가 세번째 행의 주석 만이 결과를 얻을 것으로 기대한다.

답변

4

후행 공백 LIKE 비해 우측 표현을 제외 ignored in string comparisons in SQL Server이다 포함을 의미한다.

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

네,하지만 영업 이익은 CHAR (20)의 값을 가정한다은 공백으로 패딩됩니다 - 그 해결해야하는 문제의 부분입니다. :) –