在Sybase中按顺序排序

时间:2017-05-09 12:40:50

标签: sql sybase

我有一张表:

nb  | label 
60  | from 2 and less
25  | from 3 to 16
15  | from 17 to 100

我尝试按降序排列,因此我使用查询:

select * from table order by label desc; 

但我没有得到正确的订单,而是我有以下内容:

[ { nb: 25, label: 'from 3 to 16' },
  { nb: 60, label: 'from 2 and less' },
  { nb: 15, label: 'from 17 to 100' } ]

是否认为17为1?我怎样才能得到正确的订单?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

这是一种痛苦。最简单的是,如果您有另一个具有相同排序的列。但假设第二个单词是一个不以0开头的整数,第一个单词是"来自":

order by patindex('%[0-9] %', label) desc,
         left(label, patindex('%[0-9] %', label)) desc

这基本上可以找到第一个数字的长度,并将其用于order by中的第一个键。然后按第一个数字排序。

答案 1 :(得分:1)

要快速修复,只需将其更改为:

                     ...from 03 to 16' },
      { nb: 60, label: 'from 02 and less' },
      { nb: 15, label: 'from 17 to 100' } ]

或额外的空间而不是零:

                     ...from  3 to 16' },
      { nb: 60, label: 'from  2 and less' },
      { nb: 15, label: 'from 17 to 100' } ]

两者都应该按照你想要的方式排序。