2012-12-11 95 views
0

這是我在安靜的時間遇到​​的最有趣的問題之一。我在SQL Server 2008中定義的標量函數,返回類型爲varchar(max)Order By子句排序不正確

這是查詢:

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

我缺少的東西?

+0

20分鐘內有兩個排序問題? http://stackoverflow.com/q/13822220/105929 –

回答

3

因爲,你可以在截圖中看到,他們在其他行的空格前「智者」字(和枝條的空間比「A」以上)

您可以left trim這個空間有:

ORDER BY ltrim(Jurisdiction) desc 
+0

糟糕!謝謝!沒意識到! – TCM

4

這是正確的排序順序。你有空間。您必須閱讀Case Sensitive Collation Order

+0

謝謝!不知道爲什麼我看不到這個空間!我浪費了將近1/2小時,但仍然不能確定是否有空間:) – TCM

0

通知領先的空格,嘗試

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

LTRIM就可以了。

+0

是否有修剪功能?我想你的意思是LTrim(RTrim()) – TCM

+0

是的,這就是爲什麼我編輯它。 ':D' –

0

這個截圖有點難以分辨,但是你可以檢查一下這些值的長度,因爲我認爲它們中的一些有一個領先的空間。如果是這樣,那麼他們將被正確排序。