我有一系列ID,其中包含数字,但有时也包含字母。 例如:
1,
A1,
B1,
A10,
A11,
2,
A2,
A20,
B2,
3,
A3,
B3,
4,
A4,
B4
5,
A5
B5
我需要将它们排序如下:
A1,
A2,
A3,
A4,
A5,
A10,
A11,
A20,
B1,
B2,
B3,
B4,
B5,
1,
2,
3,
4,
5
做到这一点的最佳方法是什么?
ID是从外部提供给我的,不能更改。
答案 0 :(得分:3)
该问题最初被标记为MySQL。
如果前缀只有一个字母,则可以执行以下操作:
order by (id regexp '^[A-Z]') desc, -- put letters first
(case when id regexp '^[A-Z]' then left(id, 1) end), -- order by letter
length(id) asc,
id
在SQL Server中,您可以将其表示为:
order by (case when id like '[A-Z]%' then 1 else 2 end),
(case when id like '[A-Z]%' then left(id, 1) end),
length(id),
id