在我的其中一個查詢中,我試圖按具有varchar
數據類型的列進行排序。
我想顯示的列後有一個空的字符串的列,但ORDER BY
輸出沒有按預期的方式工作(實際上它讓我感到吃驚)。在SQL Server中排序不同大小的空白字符串
這是顯示問題的SQL FIDDLE。
我研究過這個問題,我發現的唯一部分相關的文章是this。
我想知道的是爲什麼SQL Server會這樣做,我能做些什麼來強制排序將這些值視爲不同?
在此先感謝。
在我的其中一個查詢中,我試圖按具有varchar
數據類型的列進行排序。
我想顯示的列後有一個空的字符串的列,但ORDER BY
輸出沒有按預期的方式工作(實際上它讓我感到吃驚)。在SQL Server中排序不同大小的空白字符串
這是顯示問題的SQL FIDDLE。
我研究過這個問題,我發現的唯一部分相關的文章是this。
我想知道的是爲什麼SQL Server會這樣做,我能做些什麼來強制排序將這些值視爲不同?
在此先感謝。
您可以通過使用一些替代空間在ORDER BY
區分:
SELECT *
FROM Tab
ORDER BY LEN(REPLACE(val,' ','X'));
演示:SQL Fiddle
至於爲什麼SQL Server的行爲,這種方式我不能擺脫任何光線。
我更感興趣知道爲什麼會發生這種情況?如果僅僅是分類,我可以用一個角色取代空間並實現這個目標。另外我的專欄也有值,它保存用戶名。 – user2989408
@ user2989408'爲什麼'似乎在這裏回答:http://stackoverflow.com/questions/1399844/sql-server-2008-empty-string-vs-space 如果您需要幫助,以獲得排序去一定然後發佈一些示例數據。 –
使用DATALENGTH()功能
SELECT *
FROM Tab
ORDER BY DATALENGTH(val)
+1以前沒有遇到過這個功能。 http://sqlfiddle.com/#!3/e5b924/9/0 –
不幸的是,這對我不起作用,因爲我的專欄也有其他值。 – user2989408
你可以通過val,DATALENGTH(val)'命令嗎? – Anon
@GoatCO謝謝,我一直在爲小時的解釋搜索和找不到一個。 – user2989408