Order By子句没有正确排序

时间:2012-12-11 15:08:08

标签: sql sql-server sql-server-2008 tsql

这是我在一段时间内安静地遇到的最有趣的问题之一。我有一个在SQL Server 2008中定义的标量函数,其返回类型为varchar(max)

这是查询:

 Select dbo.GetJurisdictionsSubscribed(u.UserID) as 'Jurisdiction' From Users u ORDER BY Jurisdiction desc

有人可以解释为什么AAAA...结果集中的第二条记录?我正在进行降序排序,AAA...应该出现在最后。如果我将查询更改为

Jurisdiction asc

AAA在列表中排名倒数第二,而不是第一条记录。

这是结果集的屏幕截图:http://i48.tinypic.com/23j5vzq.jpg

我错过了什么吗?

4 个答案:

答案 0 :(得分:4)

这是正确的排序顺序。你有空间。您必须阅读Case Sensitive Collation Order

答案 1 :(得分:3)

因为,正如您在屏幕截图中看到的那样,在'Wise'字之前它们是其他行中的空白区域(并且空格大于'A')

您可以{:3}使用以下内容left trim

ORDER BY ltrim( Jurisdiction ) desc

答案 2 :(得分:0)

注意前面的空格,试试

SELECT ...
FROM ...
ORDER BY LTRIM(Jurisdiction) desc

LTRIM没问题。

答案 3 :(得分:0)

在屏幕截图上有点难以辨别,但是你可以检查值的长度,因为我认为它们中的一些有一个领先的空间。如果是这样,那么它们将被正确分类。