首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在T中排序类似字符串的数字

在T中排序类似字符串的数字
EN

Stack Overflow用户
提问于 2013-03-19 12:25:30
回答 3查看 139关注 0票数 3

我在一个表(称为抗原)中有字符串(称为等位基因),我很难按照正确的顺序排序。

一组有代表性的等位基因可能是:-

  • 01:01
  • 01:02
  • 02:01
  • 04:01
  • 09:01N
  • 10:01
  • 104:01
  • 105:01
  • 11:01N
  • 03:01:01
  • 03:01:02

我需要这些等位基因按以下顺序排列:

  • 01:01
  • 01:02
  • 02:01
  • 03:01:01
  • 03:01:02
  • 04:01
  • 09:01N
  • 10:01
  • 11:01N
  • 104:01
  • 105:01

我不能将等位基因排序为字符串,因为104:01和105:01将出现在11:01之前。

我不能删除':‘字符和排序的数字,因为它将把03:01:01和03:01:02放在末尾,因为数值将分别是30101和30102。

我对如何实现这一目标感到困惑,如果有任何建议,我将不胜感激。

干杯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-19 13:04:08

假设最大字符数为between/before/after : is 3,则可以使所有字符串值的长度和顺序相同,如下所示。不过看起来有点复杂!

小提琴演示

代码语言:javascript
复制
;with cte as (
select val, charindex(':',val,1) index1, 
            charindex(':',val,charindex(':',val,1)+1) index2
from t
)
select val,right('000' + left(val,index1-1),3) + ':' +
           case when index2-index1>0 
                then  right('000' + substring(val,index1+1,index2-index1-1),3)
           else right('000' + substring(val,index1+1,len(val)),3) end + ':' +
           case when index2>0 
                then  right('000' + right(val, len(val) - index2),3)
           else '000' end As odr

from cte
order by odr

|      VAL |         ODR |
--------------------------
|    01:01 | 001:001:000 |
|    01:02 | 001:002:000 |
|    02:01 | 002:001:000 |
| 03:01:01 | 003:001:001 |
| 03:01:02 | 003:001:002 |
|    04:01 | 004:001:000 |
|   09:01N | 009:01N:000 |
|    10:01 | 010:001:000 |
|   11:01N | 011:01N:000 |
|   104:01 | 104:001:000 |
|   105:01 | 105:001:000 |
票数 1
EN

Stack Overflow用户

发布于 2013-03-19 12:38:40

要按冒号之前的部分进行数字排序吗?如果是的话,这样的事情应该可以做到:

代码语言:javascript
复制
select *
from mytable
order by cast(substring(col, 0, CHARINDEX(':', col)) as int)

结果:

代码语言:javascript
复制
01:01
01:02
02:01
03:01:01
03:01:02
04:01
09:01N
10:01
11:01N
104:01
105:01
票数 0
EN

Stack Overflow用户

发布于 2013-03-19 12:39:48

使用

代码语言:javascript
复制
ORDER BY CAST (
             SUBSTR(Allelens
                    , 0
                    , CHARINDEX(Allelens, ':') - 1)
             AS INTEGER)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15499471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档