我有一个包含以下值的表:
create temporary table test (name char(6))
insert into test values ('001A1');
insert into test values ('BIKE');
insert into test values ('N01A2');
insert into test values ('NILA');
insert into test values ('NW001');
我需要将它们排序为:
BIKE
NILA
NW001
N01A2
001A1
我接下来试过了:
SELECT * FROM test
order by IF(name RLIKE '^[a-z]', 1, 2), name
得到了:
BIKE
N01A2
NILA
NW001
001A1
如何首先按字母排序,然后按数字排序?
答案 0 :(得分:0)
order by (case when name regexp '^[^a-zA-Z]' then 0
when name regexp '^.[^a-zA-Z]' then 1
when name regexp '^..[^a-zA-Z]' then 2
when name regexp '^...[^a-zA-Z]' then 3
when name regexp '^....[^a-zA-Z]' then 4
when name regexp '^.....[^a-zA-Z]' then 5
when name regexp '^......[^a-zA-Z]' then 6
when name regexp '^.......[^a-zA-Z]' then 7
when name regexp '^........[^a-zA-Z]' then 8
else 9
end) desc,
name
这不是完全你想要的,因为它在第一个数字后使用常规排序。但它可能足够接近。