Excel和SQLsorting的区别

使用的程序:

SQL Server 2000,Excel 2003

我们的数据库中有一个名为Samples的表格。 使用以下查询…

SELECT [Sample], [Flag] FROM Samples ORDER BY [Sample] 

…我们得到以下结果:

  Sample Flag ---------- ---- 12-ABC-345 1 123-45-AB 0 679-ADC-12 1 

当用户在Excel电子表格中具有相同的数据并按“样本”列sorting时,他们将获得以下sorting顺序:

  Sample Flag ---------- ---- 123-45-AB 0 12-ABC-345 1 679-ADC-12 1 

出于好奇,为什么在SQL和Excelsorting(除了“因为它是微软”)之间有差异。

有没有在SQL中的方法在与Excel方法相同的方法,在样品列sorting,反之亦然?

SQL服务器sorting由数据库,表或字段sorting确定。 默认情况下,这是一个标准的词典stringsorting(连字符的字符代码在数字上低于1的字符代码)。 不幸的是,根据这个微软的链接 ,Excel sorting时忽略了连字符和撇号 ,除了打破平局之外。 没有专门的(我知道的),所以你必须伪装。

要在SQL Server中实现相同的结果,您需要执行以下操作:

 SELECT [Sample], [Flag] FROM Samples ORDER BY REPLACE(REPLACE([Sample], '-', ''), '''', ''), (CASE WHEN CHARINDEX([Sample], '-') > 0 THEN 1 ELSE 0 END) + (CASE WHEN CHARINDEX([Sample], '''') > 0 THEN 1 ELSE 0 END) ASC 

这将按stringsorting结果,就像删除了所有连字符和撇号一样,然后通过计算值进行sorting,对于包含连字符撇号的任何值,计算结果为1对于包含两者的任何值,结果为2一个既不包含也不包含的值)。 这个expression式将导致任何包含连字符和/或撇号的值在Excel中相同的expression式之后进行sorting。

我个人认为SQL Server的sorting顺序是正确的,我会介入Excel,因为它是一个“不寻常”的方法(至less从我的经验)。

下面是对Excel如何sorting字母数字数据以及如何解决该问题的说明: 如何在Excel中正确sorting字母数字数据 。