请教下,形如A、AB、ABC、B、C的怎么排序

ooneuhye 2018-04-03 03:21:09
当前含有数据形如 A11、A23、B20、C18、AB11、BC10、ABC100这样的,怎么先按字母A这样的排序,再按数字升序排
结果需要成这样的,
A11
A23
B20
C18
AB11
BC10
ABC100
请教下,这样的怎么排序?
...全文
762 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2018-04-03
  • 打赏
  • 举报
回复
e.g.
SELECT *
FROM
(VALUES ('A11')
      , ('A23')
      , ('B20')
      , ('C18')
      , ('AB11')
      , ('BC10')
      , ('ABC100')) t (Col)
ORDER BY PATINDEX('%[0-9]%',Col),Col;
/*
A11
A23
B20
C18
AB11
BC10
ABC100
*/
zbdzjx 2018-04-03
  • 打赏
  • 举报
回复
这样?
with t(c1) as
(
select 'A11' union all
select 'ABC100' union all
select 'C18' union all
select 'A23' union all
select 'AB11' union all
select 'B20' union all
select 'BC10'
)
select * from (
select c1, MIN(number) number from t a left join
(select number+1 number from master..spt_values where type='P') b on b.number<=LEN(a.c1)
where ISNUMERIC(substring(a.c1, number, 1))>0
group by c1
) aa
order by number, c1
ooneuhye 2018-04-03
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([col] nvarchar(26))
Insert #T
select N'A11' union all
select N'A23' union all
select N'B20' union all
select N'C18' union all
select N'AB11' union all
select N'BC10' union all
select N'ABC100'
Go
--测试数据结束
Select * from #T ORDER BY col

不好意思,开始写错了,帖子重新编辑了
ooneuhye 2018-04-03
  • 打赏
  • 举报
回复
不好意思,开始写错了,帖子重新编辑了
二月十六 2018-04-03
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([col] nvarchar(26))
Insert #T
select N'A11' union all
select N'A23' union all
select N'B20' union all
select N'C18' union all
select N'AB11' union all
select N'BC10' union all
select N'ABC100'
Go
--测试数据结束
Select * from #T ORDER BY col



22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧