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

Jon*_*lle 5 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
Run Code Online (Sandbox Code Playgroud)

s.SUBLOTCODE定义为char(20),只有当我取消注释添加所需空格的第三行时,我才会得到结果.

Mar*_*ith 6

除了比较右侧的表达式外,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]    
Run Code Online (Sandbox Code Playgroud)

返回

=    Like RHS Like LHS
---- -------- --------
Y    N        Y
Run Code Online (Sandbox Code Playgroud)