SQL char到varchar的比较有效,为什么?

时间:2011-11-23 18:21:55

标签: sql-server sql-server-2008

为什么当where子句中的目标列是char(20)时,以下内容会返回结果?

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),只有当我取消注释添加所需空格的第三行时,我才会得到结果。

2 个答案:

答案 0 :(得分:6)

除了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

答案 1 :(得分:0)

VARCHAR(20)表示任意长度的字符,包括20。