求一个排序的sql语句

本文介绍了一种使用SQL对特定格式的数据进行排序的方法。通过实例演示了如何对包含数字和单位的字符串进行正确排序,并确保非数字项能正确地排列在末尾。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我要查询的数据有这样的一列
2G
1G
16G
其他
4G

我想要将这些排序成这样
1G
2G
4G
16G
其他

sql排序语句该怎么写?

--> 测试数据: #tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb (nn varchar(4))
insert into #tb
select '2G' union all
select '1G' union all
select '16G' union all
select '其他' union all
select '4G'

select * from #tb order by len(replace(nn,'G','')),replace(nn,'G','')

nn
----
1G
2G
4G
16G
其他

(
5 行受影响)

select * from tb order by cast(replace(nn,'G','') as int),case when nn='其他' then 1 else 0 end

--> 测试数据: #tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb (nn varchar(4))
insert into #tb
select '2G' union all
select '1G' union all
select '16G' union all
select '其他' union all
select '4G'

select * from #tb
order by
cast(case when substring(nn,1,patindex('%[^0-9]%',nn)-1)='' then '1000'
   
else substring(nn,1,patindex('%[^0-9]%',nn)-1) end  as int)


nn
----
1G
2G
4G
16G
其他

(
5 行受影响)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值