【问题标题】:Two visibly identical strings are considered not equal by SQL Server and ExcelSQL Server 和 Excel 认为两个明显相同的字符串不相等
【发布时间】:2012-12-30 04:52:15
【问题描述】:

这可能太简单了,但我似乎无法弄清楚这一点。

我有一个简单的 SELECT DISTINCT 语句,它返回两行:代码和说明

它们是这样的:

00065        Stmt to Party 2-4 pgs
00065        Stmt to Party 2-4 pgs

但是,SELECT 语句中的 DISTINCT 永远不会过滤掉重复的。我尝试在 Excel 2010 中粘贴这两个值并尝试使用“删除重复”功能,没有用;我还尝试了一个像这样的简单公式:=IF(D337=D338,"X","Y") 结果总是“Y”。

Excel 中的 AutoFilter 也表明这些字符串是不同的。

字符串的长度是相等的,用 SQL Server LEN(DESCRIPTION) 函数测试。其中也没有看不见的特殊字符。

我如何找出这两个字符串之间的 什么 不同?请注意,我仅将 Excel 用于测试/故障排除目的。

请帮忙。谢谢你。

【问题讨论】:

  • 你能转换成两个字符串中的字节吗?例如。这里string-functions.com/string-hex.aspx 当然,您在此处粘贴的内容看起来相同 - 但可能与您在源代码中的内容不同。
  • @Caribou 哇,你是对的;太感谢了。它们导致两个略有不同的编码字符串。下一步是什么?
  • 嗯 - 它们来自哪里以及它们为什么不同:) 我无法回答 - 我假设如果您需要更正它们,那么您可以进行手动更新(查询)以便不正确的是?
  • 听起来有人正在从网络、Word 或其他文本格式化应用程序中将文本复制到您的数据库中。对于您的数据库客户端应用程序来说,像这样过滤掉文本垃圾很重要(除非您真的希望它在您的数据库中)。

标签: sql-server string tsql sql-server-2005 duplicates


【解决方案1】:

使用离线十六进制编辑器或在线工具(如http://www.string-functions.com/string-hex.aspx)并比较两个字符串中的字节。然后你应该看看它们是否相同。 (来自上面的评论)

然后您可以执行手动查询,通过删除或更新字符串来更新数据库以使值一致。

【讨论】:

  • 空白空间由一个十六进制 20 和另一个十六进制 a0 表示。你知道这两者有什么区别吗?
  • @FMFF: 0xA0 是一个不间断的空格
  • 道歉@FMFF 恐怕我得去睡觉了——希望你把事情搞定了
【解决方案2】:

尝试转换为 nvarchar,然后采用不同的值。在某些情况下有效...

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多