我的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
等。
如何正确排序?我会感激任何帮助!
答案 0 :(得分:3)
如果您需要按数字排序,应该更好地将数据存储为数字。将零件存储在三列中,然后您可以查询ORDER BY n1, n2, n3
您可以添加computed column
以返回完整的字符串,例如用公式
=convert(nvarchar(10), n1) + '.' + convert(nvarchar(10), n2) +
CASE WHEN n3 IS NOT NULL THEN '.' +
convert(nvarchar(10), n3) ELSE '' END
当然你可以让dbms反汇编一个字符串,并在每个查询中查找并将部分转换为数字,但这样会“慢”且效率低下。
编辑
正如Martin Smith的评论中的链接,以及我还不知道的那些 - 你实际上可以直接用
来做ORDER BY CONVERT(HIERARCHYID, '/' + myColumn + '/')