Упорядоченный слэш разделенный список - PullRequest
0 голосов
/ 09 января 2019

У меня есть столбец 'GUI_KVLevelName'. Он имеет данные как:

500,00 / 69,00 / 34,50
500,00 / 400,00 / 138,00
500,00 / 69,00
500,00 / 400,00
500,00 / 345,00 / 34,50
57,00 / 8,30

Я хочу использовать заказ с этим. Это столбец varchar, но я хочу заказать его как числовой. Так как я могу использовать порядок по этой колонке?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Второй ответ, если вы не можете GTD два десятичных знака.

* ** 1003 тысяча два * Пример
Declare @YourTable Table ([GUI_KVLevelName] varchar(50))
Insert Into @YourTable Values 
 ('500.00/69.00/34.50')
,('500.00/400.00/138.00')
,('500.00/69.00')
,('500.00/400.00')
,('500.00/345.00/34.50')
,('0.45/5.30')
,('0.1/9.30')
,('0.01/9.30')
,('0.05/9.30')
,('1.3/4.30')

Select A.*
 From @YourTable A
 Cross Apply (
                Select Pos1 = xDim.value('/x[1]','money')
                      ,Pos2 = xDim.value('/x[2]','money')
                      ,Pos3 = xDim.value('/x[3]','money')
                      ,Pos4 = xDim.value('/x[4]','money')
                      ,Pos5 = xDim.value('/x[5]','money')
                      ,Pos6 = xDim.value('/x[6]','money')
                      ,Pos7 = xDim.value('/x[7]','money')
                From  (Select Cast('<x>' + replace([GUI_KVLevelName],'/','</x><x>')+'</x>' as xml) as xDim) as A 
             ) B
 Order By Pos1,Pos2,Pos3,Pos4,Pos5,Pos6,Pos7

Returns

GUI_KVLevelName
0.01/9.30
0.05/9.30
0.1/9.30
0.45/5.30
1.3/4.30
500.00/69.00
500.00/69.00/34.50
500.00/345.00/34.50
500.00/400.00
500.00/400.00/138.00
0 голосов
/ 09 января 2019

Вот небольшой чит, который может сработать

Удаляя десятичные точки, мы конвертируем отдельные значения в больший INT. Затем он преобразуется в и затем сортируется с помощью hierarchyid типа

Пример

Declare @YourTable Table ([GUI_KVLevelName] varchar(50))
Insert Into @YourTable Values 
 ('500.00/69.00/34.50')
,('500.00/400.00/138.00')
,('500.00/69.00')
,('500.00/400.00')
,('500.00/345.00/34.50')
,('0.45/5.30')          -- Added for leading zero
,('0.10/9.30')          -- Added for leading zero

Select *
 From @YourTable
 Order By try_convert(hierarchyid,replace('/'+replace([GUI_KVLevelName],'.','1')+'/','/0','/'))

Returns

GUI_KVLevelName
0.10/9.30
0.45/5.30
500.00/69.00
500.00/69.00/34.50
500.00/345.00/34.50
500.00/400.00
500.00/400.00/138.00
...