4

我的 nvarchar 列包含以下数据:

1.0  
10.0      
10.1      
5.1       
6.4       
5.3       
90.5      
39.23     
23.2.2    
21.2.1    
4.3.1 

当我将它作为字符串订购时,我得到以下结果:

1.0       
10.0      
10.1      
21.2.1    
23.2.2    
39.23     
4.3.1     
5.1       
5.3       
6.4       
90.5  

select * from mytable order by mycolumn

这是错误的,它应该将集合排序为数字,例如:

1.0
1.1
1.2
2.3
2.3.1

等等

如何正确排序?我将不胜感激任何帮助!

4

1 回答 1

3

如果需要按数字排序,最好将数据存储为数字。将零件存储在三列中,然后您可以查询ORDER BY n1, n2, n3
您可以添加 acomputed column以返回完整的字符串,例如使用公式

=convert(nvarchar(10), n1) + '.' + convert(nvarchar(10), n2) + 
CASE WHEN n3 IS NOT NULL THEN '.' + 
convert(nvarchar(10), n3) ELSE '' END

当然,您可以让 dbms 反汇编一个字符串并在每个查询中查找并将部分转换为数字,但这会“缓慢”且效率低下。

编辑

正如马丁史密斯评论中的链接一样,我还不知道 - 你实际上可以直接使用

ORDER BY CONVERT(HIERARCHYID, '/' + myColumn + '/')
于 2013-10-05T10:46:44.637 回答