2014-02-11 46 views
2

我有一個帶有varchar數據類型列的表。 在它的數據等8.1,8.2,8.3,8.1.1,8.3.1,8.10,8.12,8.1.2等 我想訂購等訂購Sql Server 2008中的十進制值

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

小數點的數量是固定的還是可以變化的? –

+0

這不是十進制的 – Jade

+0

它是一個包含字符串的varchar數據類型列,我已經從該列中提取這些值。小數點不固定 –

回答

6

表示的值類似於Hierarchy。所以第一值轉換爲hierarchy,然後執行排序操作

SELECT LEN(COL)AS SORT,COL FROM #TEMP 
Order by convert(hierarchyID,'/' + [Col] + '/') 

在層級中的每個電平由/分化基本上從子分離母體

SQL FIDDLE DEMO

+0

這對我來說...非常感謝! –

+0

hierarchyID是否可以與SQL Server 2005一起使用? –

+0

不,它不會工作。它是從'sql server 2008'開始引入的 – praveen

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) 
相關問題