在我的其中一个查询中,我试图按具有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