如何对可变长度的字符分隔字符串进行排序?
我想对此表进行排序
number | make
=========|=========
11280-08 | bmw
13920-08 | audi
44630-08 | audi
1741-08 | mercedes
03-05 | audi
40093-08 | audi
332-04 | bmw
这样首先在每个后缀组中提升后缀-00
然后加上前缀0000
:
number | make
=========|=========
332-04 | bmw
03-05 | audi
1741-08 | mercedes
11280-08 | bmw
13920-08 | audi
40093-08 | audi
44630-08 | audi
我正在运行此查询
select * from mytable
order by right(number,2),number asc
但我得到了这个
number | make
=========|=========
332-04 | bmw
03-05 | audi
11280-08 | bmw
13920-08 | audi
1741-08 | mercedes
40093-08 | audi
44630-08 | audi
请注意1741-08
在13920-08
之后应该如何跟在{{1}}之前。
答案 0 :(得分:1)
Varchars将按字母顺序排序:(1,11,2,21,3,...)
如果您想要数字顺序,请将前缀转换为整数。
select * from mytable
order by
right(number,2)
,CAST(LEFT(number,LEN(number)-3) AS int)
答案 1 :(得分:0)
将缺少的零添加到较短的数字,以便它们首先出现。这样,在排序时,它们都具有相同的长度。这里我们假设最大数字有8个字符
select *
from mytable
order by REPLICATE('0', 8 - LEN(number)) + number
答案 2 :(得分:-3)
REPLICATE('',X - Len(Field))
其中X是所需的固定长度
更好的是将 - 转换为。并使其成为十进制数。