sql-server – 正确排序存储为SQL Server中的字符的虚线数字

前端之家收集整理的这篇文章主要介绍了sql-server – 正确排序存储为SQL Server中的字符的虚线数字前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个存储自定义项目编号的sql表.这些中的每一个都可以让一个孩子从中分离出一个分隔符……每个人都可以有一个孩子.

它可能是一个例子(再次,动态,不知道它将是什么):

Item Number
1
1.1
1.1.1
1.1.1.1
1.1.1.1.a
1.1.1.1.b
10
11
2.1
2.10
2.2
2.20
20
3
30

使这一点变得艰难的是这些数字是在飞行中创建的,而不一定是有序的.您可以创建5个数字(1,2,3,4,5),然后创建一个1的子项,以便它不会按顺序存储在数据库中.

如何从表格中选择并按项目编号进行排序,以便在数据未按该顺序存储时如上所示正确显示

我试过的大多数解决方案都给了我1,5 …… 1.1,1.2或1,1.1,1.1.1,10,11 …… 2,20 …… 3,30等

解决方法

如果您有sql 2008,则可以使用新的hierarchyid数据类型:
WITH Items (ItemNumber) AS (
    SELECT '1' UNION ALL SELECT '1.1' UNION ALL SELECT '1.1.1'
    UNION ALL SELECT '10' UNION ALL SELECT '11' UNION ALL SELECT '2'
    UNION ALL SELECT '2.1' UNION ALL SELECT '20' UNION ALL SELECT '3'
    UNION ALL SELECT '30'
)
SELECT *
FROM Items 
ORDER BY Convert(hierarchyid,'/' + ItemNumber + '/');
原文链接:https://www.f2er.com/mssql/83491.html

猜你在找的MsSQL相关文章