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