在我的一个查询中,我试图按照具有varchar
数据类型的列进行排序
我希望显示在具有空字符串的列之后有空格的列,但ORDER BY
的输出不能像我预期的那样工作(事实上它让我感到惊讶)。
这是显示问题的SQL FIDDLE。
我已经研究过这个问题,我发现的唯一部分相关文章是this。
我想知道的是为什么SQL Server会这样做,我该怎么做才能强制排序将这些值视为不同?
提前致谢。
答案 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会以这种方式运行,我无法说清楚。