【发布时间】:2017-09-08 10:27:17
【问题描述】:
我这里有一个非常奇怪的。
我在一个表中有 2 行,其中运行 SELECT 查询时在同一列中 的数据是相同的,其中一个是尾随空格(或者可能是另一个空白字符)。列声明为varchar(max)。我想将这两个值视为相同(碰巧做一个 GROUP BY)。
在 RTRIM 不起作用后,我查看了两者的 varbinary ......它们是相同的。但它们不是,我可以看到一个空格,并且 GROUP BY 将它们视为单独的值(这是我真正的问题)。
我已经尝试替换 CHAR(13) - 不是这样。
有什么线索吗?
代码:
declare @vals table
(
id int identity primary key,
textval varchar(max)
)
insert into @vals (textval) values ('07.09.17 Liefertermin weiterhin nicht bekannt (LZ Elmshorn)')
insert into @vals (textval) values ('07.09.17 Liefertermin weiterhin nicht bekannt (LZ Elmshorn)
')
select id, textval + '*' from @vals
select id, RTRIM(LTRIM(REPLACE(textval,CHAR(13),''))) + '*' from @vals
select textval from @vals group by textval
【问题讨论】:
-
很可能,因为没有什么问题,没有什么可修剪的。 比较 可能是错误的。这些值实际上可能不同。在
varchar或varbinary中,其中一个值是固定长度的。也许最后的那个字符不是一个空格而是另一个字符。发布一个可重现的示例 -
例如,将 6 个字符存储在
char(8)中而不是varchar(8)将导致填充,因为char(8)具有 固定 长度。您可能没有注意到,因为 SQL(标准的)规则要求在匹配之前strings get padded to the same length -
它在 SAME 列中。
-
好的,那你可以告诉我们出了什么问题。 我们不能,因为我们根本没有任何信息——没有表架构、没有数据、没有查询。 任何人如何提供帮助,除非他/她站在你旁边的桌子上?
-
解决什么问题?顺便说一句,您是否检查了角色实际上是什么? CHR(13), 10 两个?
标签: sql-server