看起来像SQL服务器(试过2008 R2)是列做一个RTRIM
在GROUP BY
条款。有没有人注意到这个?我在这里错过了什么吗?SQL Server组中丢弃空间。通过
这两个选择在下面的查询中返回相同的结果集,这不应该是我相信的情况。
declare @t table(Name varchar(100), Age int)
insert into @t values ('A', 20)
insert into @t values ('B', 30)
insert into @t values ('C', 40)
insert into @t values ('D', 25)
insert into @t values (' A', 21)
insert into @t values ('A ', 32)
insert into @t values (' A ', 28)
select
Name,
count(*) Count
from @t
group by Name
select
rtrim(Name) RtrimmedName,
count(*) Count
from @t
group by rtrim(Name)
请让我知道你的想法...
不是。因此,标准声称它填充到最大长度*用于比较*,但问题是关于GROUP BY的输出,它是** NOT **如您所期望的那样较长的一个,如果确实中间体被延长(他们不是)。简单地说,'a'='a'(尾随空格被忽略) – RichardTheKiwi
@RichardTheKiwi - 第8.2节“根据整理顺序,即使两个字符串的长度不同,也可以将两个字符串相等,即使它们长度不同也可能不相同 当操作 MAX,MIN,DISTINCT,对分组列的引用以及UNION,EXCEPT和INTERSECT运算符引用字符 字符串时,**这些操作从 a选择的具体值这样的相等值的集合取决于实现。**“(强调增加) –