2014-02-06 42 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

相关问题