我有一个包含varchar数据类型列的表。 其中的数据类似于8.1,8.2,8.3,8.1.1,8.3.1,8.10,8.12,8.1.2等。 我想订购这样的数据,如
8.1
8.1.1
8.1.2
8.2
8.3
8.3.1
8.10
8.12.
我已经尝试了以下内容:
SELECT LEN(COL)AS SORT,COL FROM #TEMP ORDER BY LEN(COL),COL
这让我像
一样出局8.1
8.2
8.3
8.10
8.12
8.1.1
8.1.2
8.3.1
非常感谢帮助!!!
答案 0 :(得分:6)
表示的值类似于Hierarchy
。首先将值转换为hierarchy,然后执行排序操作
SELECT LEN(COL)AS SORT,COL FROM #TEMP
Order by convert(hierarchyID,'/' + [Col] + '/')
在层次结构中,每个级别由/
区分,它基本上将父级与子级
答案 1 :(得分:0)
declare @t table(col1 varchar(50))
insert into @t values('8.1'),('8.1.2'),('8.2'),('8.3'),('8.3.1'),('8.10'),('8.12'),('8.1.1')
SELECT *
FROM @t
ORDER BY CAST('/' + col1 + '/' AS HIERARCHYID)