我有一张表:
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?我怎样才能得到正确的订单?
感谢您的帮助
答案 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' } ]
两者都应该按照你想要的方式排序。