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

 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转换为十进制(1,1)用于这些值,但是我没有得到如何将其转换或强制转换为列内的特定字段...我不想转换整个列..我不会得到答案...

最佳答案

您可以包括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


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

关于mysql - 是CAST还是CONVERT还是自定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42919029/

10-11 04:43