【问题标题】:CAST OR CONVERT or custom?铸造或转换或定制?
【发布时间】:2017-08-12 15:24:16
【问题描述】:

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

 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),但我不知道如何转换或将其投射到列中的特定字段...我不想投射整个列..然后我不会得到答案...

【问题讨论】:

    标签: mysql sql casting sql-convert


    【解决方案1】:

    试试这个

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 但我不希望所有短字符串首先出现..检查我在 3.10 和 3.20 的主题标签中提到的条件
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 2014-11-28
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      相关资源
      最近更新 更多