0

我有以下表格链,除了第一个值外,它按升序排列,

 Strand
 3.1.1
 3.1.1.1
 3.1.1.2
 3.1.2
 3.1.2.1
 3.1.2.2
 3.10       # this should have been at the top most
 3.2.1
 3.2.1.1
 ...
 ...
 3.20      #Similarly,this should have been above 3.2.1 and below 3.1.2.2

该列在 varchar 中,我认为将 3.10 转换为 3.1 和 3.20 转换为 3.2 将起到诀窍,即仅针对这些值从 varchar 转换为 decimal(1,1),但我不知道如何转换或转换它列内的特定字段...我不想投射整个列..然后我不会得到答案...

4

2 回答 2

0

您可以包含一个order by长度。

ORDER BY
LEFT(strand,1),
RIGHT(LEFT(strand,3),1),
CASE WHEN RIGHT(LEFT(strand,4),1) <> '.' and RIGHT(LEFT(strand,4),1) <> '' THEN 1 ELSE 2 END

这样,较短的字符串将首先出现

于 2017-03-21T05:28:04.793 回答
0

尝试这个

select * from @t1
ORDER BY 
CASE WHEN strand like '%0%' then convert(varchar,CONVERT(float,strand)) ELSE strand END

在此处输入图像描述

于 2017-03-21T05:57:55.267 回答