在SQL Server中对不同大小的空字符串进行排序

时间:2014-02-06 22:02:25

标签: sql sql-server sql-order-by

在我的一个查询中,我试图按照具有varchar数据类型的列进行排序 我希望显示在具有空字符串的列之后有空格的列,但ORDER BY的输出不能像我预期的那样工作(事实上它让我感到惊讶)。

这是显示问题的SQL FIDDLE

我已经研究过这个问题,我发现的唯一部分相关文章是this

我想知道的是为什么SQL Server会这样做,我该怎么做才能强制排序将这些值视为不同?

提前致谢。

2 个答案:

答案 0 :(得分:2)

使用DATALENGTH()功能

SELECT *
FROM Tab
ORDER BY DATALENGTH(val)

答案 1 :(得分:1)

您可以通过用某些内容替换空格来区分ORDER BY

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

演示:SQL Fiddle

至于为什么SQL Server会以这种方式运行,我无法说清楚。