在 sql 查询中,先按名称排序,然后按分隔字符串中的数字排序

Sort by Name first then number in sql query from a delimited string

我们设计了1个字段来登记客户的分站记录。所以 table 行看起来像这样。

create table test4 (f2 varchar(100))

insert into test4 (f2) values ('A08-0100')
insert into test4 (f2) values ('006-0100')
insert into test4 (f2) values ('008-0200')
insert into test4 (f2) values ('008-0200')
insert into test4 (f2) values ('007-0100')
insert into test4 (f2) values ('009-0100')
insert into test4 (f2) values ('009-F100')

现在我想先按站排序,再划分,但是我希望字母在第一组先显示。

到目前为止我试过的是

select * from test4 order by left(f2, 3), right(f2, 40)

First Group(station)        2nd Group (division)
A08                  -      0100

预期输出:

A08-0100
006-0100
007-0100
008-0200
008-0200
009-0100
009-F100

您可以检查电台是否以字母开头并相应地对其进行排序...像这样:

case when left(f2, 1) like '[a-z]%' then 1 else 2 end

在 order by 子句中使用它,像这样:

select * from test4 order by case when left(f2, 1) like '[a-z]%' then 1 else 2 end, left(f2, 3), right(f2, 4);

请参阅此处 Fiddle