在 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。
我们设计了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。