mysql在数字前排序字符

时间:2016-04-18 10:20:56

标签: mysql sorting alphabetical

我有一个包含以下值的表:

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

如何首先按字母排序,然后按数字排序?

1 个答案:

答案 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

这不是完全你想要的,因为它在第一个数字后使用常规排序。但它可能足够接近。