【问题标题】:SqlServer removing trailing spacesSqlServer 删除尾随空格
【发布时间】: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


【解决方案1】:

原来是回车+换行CHAR(13) CHAR(10)

感谢 Panagiotis Kanavos 让我星期五的大脑(最终)朝着正确的方向前进。

我发现以下有用的https://www.codeproject.com/Tips/330787/LTRIM-RTRIM-doesn-t-always-work

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2015-07-06
    • 1970-01-01
    • 2016-09-10
    • 2015-05-11
    相关资源
    最近更新 更多