2014-02-06 118 views
0

在我的其中一個查詢中,我試圖按具有varchar數據類型的列進行排序。
我想顯示的列後有一個空的字符串的列,但ORDER BY輸出沒有按預期的方式工作(實際上它讓我感到吃驚)。在SQL Server中排序不同大小的空白字符串

這是顯示問題的SQL FIDDLE

我研究過這個問題,我發現的唯一部分相關的文章是this

我想知道的是爲什麼SQL Server會這樣做,我能做些什麼來強制排序將這些值視爲不同?

在此先感謝。

+0

@GoatCO謝謝,我一直在爲小時的解釋搜索和找不到一個。 – user2989408

回答

1

您可以通過使用一些替代空間在ORDER BY區分:

SELECT * 
FROM Tab 
ORDER BY LEN(REPLACE(val,' ','X')); 

演示:SQL Fiddle

至於爲什麼SQL Server的行爲,這種方式我不能擺脫任何光線。

+0

我更感興趣知道爲什麼會發生這種情況?如果僅僅是分類,我可以用一個角色取代空間並實現這個目標。另外我的專欄也有值,它保存用戶名。 – user2989408

+0

@ user2989408'爲什麼'似乎在這裏回答:http://stackoverflow.com/questions/1399844/sql-server-2008-empty-string-vs-space 如果您需要幫助,以獲得排序去一定然後發佈一些示例數據。 –

2

使用DATALENGTH()功能

SELECT * 
FROM Tab 
ORDER BY DATALENGTH(val) 
+0

+1以前沒有遇到過這個功能。 http://sqlfiddle.com/#!3/e5b924/9/0 –

+0

不幸的是,這對我不起作用,因爲我的專欄也有其他值。 – user2989408

+0

你可以通過val,DATALENGTH(val)'命令嗎? – Anon

相關問題