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),只有当我取消注释添加所需空格的第三行时,我才会得到结果.
除了比较右侧的表达式外,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)