2014-02-11 3 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 .so первым преобразовать значения в hierarchy, а затем выполнять операции сортировки

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

В иерархии каждый уровень дифференцируется по /, который в основном отделяет родителей от ребенка

SQL FIDDLE DEMO

+0

, это сделало это для меня ... Большое спасибо! –

+0

Будет ли Иерархия работать с 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) 
Смежные вопросы